2015-02-19 2 views
7

В ответ от json я получаю часовой пояс UTC. Мне нужно преобразовать его в местное время.convert UTC to local time using angularjs

<span class="text-muted">{{trans.txnDate}}</span> 

может кто-нибудь помочь в этом ???

Спасибо ..

+0

Можете ли вы показать, как вы получите его от JSON? это в миллисекундах или строке? – Mihai

+1

это строковый формат pattern = "yyyy: MM: dd'T'HH: mm: ss'Z '" – chandru

+1

Если я делаю что-то со временем и часами, я всегда использую http://momentjs.com/ и http://momentjs.com/timezone/. Эта библиотека очень удобна. –

ответ

9

EDIT (2 января 2017): Пожалуйста, обратитесь @ ответ Джейсона, это лучше, чем эта, так как он использует пользовательский фильтр, чтобы установить формат дату - это более Угловой способ сделать это ,


Мой первоначальный ответ и редактирование:

Вы можете использовать date фильтр для форматирования даты:

<span class="text-muted">{{trans.txnDate | date:'yyyy-MM-dd HH:mm:ss Z' }}</span> 

Этот выход будет:

2010-10-29 09:10:23 +0530 

(при условии, что trans.txnDate = 1288323623006;)

See this documentation of date in angularjs.org. Это очень много примеров, которые очень полезны!


EDIT:

В ответ на ваш комментарий, используйте следующий, чтобы получить дату как 17 oct 2014:

<span class="text-muted">{{trans.txnDate | date:'dd MMM yyyy' | lowercase }}</span> 

Проверьте ссылку документации о которой я говорил выше.

EDIT2:

В ответ на ваш другой комментарий, используйте следующий код. Проблема в том, что строка, которую вы получаете, неправильно отформатирована, поэтому объект Date не может ее распознать. Я отформатировал его в контроллере, а затем перешел к представлению.

function MyCtrl($scope) { 
 
    var dateString = "2014:10:17T18:30:00Z"; 
 
    dateString = dateString.replace(/:/, '-'); // replaces first ":" character 
 
    dateString = dateString.replace(/:/, '-'); // replaces second ":" character 
 
    $scope.date = new Date(dateString); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app ng-controller="MyCtrl"> 
 
    {{date | date:'dd MMM yyyy' | lowercase }} 
 
</div>

The JS код для замены может быть улучшена путем поиска более разумный способ заменить первые 2 вхождения : характера.

+0

Его уже возвращаются так: «2014: 10: 17T18: 30: 00Z» Но мне нужно что-то вроде этого «17 окт 2014» – chandru

+0

@chandru Пожалуйста, уточните мой обновленный ответ. –

+0

ваш ответ работает отлично, чемxx .. – chandru

15

Мне просто пришлось решить эту проблему, а также даты, исходящие из .NET Web API в формате «yyyy-MM-ddTHH: mm: ss» (например, 2016-02-23T00: 11: 31) без " Z 'для указания времени UTC.

Я создал этот фильтр, который расширяет фильтр угловой даты и гарантирует, что суффикс часовой пояс включен для времени UTC.

UTC Локальный Фильтр:

(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .filter('utcToLocal', utcToLocal); 

    function utcToLocal($filter) { 
     return function (utcDateString, format) { 
      if (!utcDateString) { 
       return; 
      } 

      // append 'Z' to the date string to indicate UTC time if the timezone isn't already specified 
      if (utcDateString.indexOf('Z') === -1 && utcDateString.indexOf('+') === -1) { 
       utcDateString += 'Z'; 
      } 

      return $filter('date')(utcDateString, format); 
     }; 
    } 
})(); 

Пример:

{{product.CreatedDate | utcToLocal:"dd.MM.yyyy"}} 
0

Я была такая же проблема. Фильтр даты AngularJs не определяет, что строка - это формат UTC, но объект JavaScript Date. Таким образом, я создал простую функцию в контроллере:

$scope.dateOf = function(utcDateStr) { 
    return new Date(utcDateStr); 
} 

А затем использовали что-то вроде:

{{ dateOf(trans.txnDate) | date: 'yyyy-MM-dd HH:mm:ss Z' }} 

Он отображает дату/время в местном часовом поясе