flight.departure_at - это формат UTC 2016-05-04T19:00:00.000Z
Когда я показываю это выражение на странице,
Формат полностью не соответствует ожиданиям.
Почему выходят 12:00? Как так?
Я также хочу знать, как можно сохранить весь формат времени в формате UTC по всему миру, не добавляя везде. Это сделает весь App уязвимым
Departure_time: {{flight.departure_at}} ||| {{flight.departure_at | date: 'HH:mm'}}
Departure_time: 2016-05-04T19:00:00.000Z ||| 12:00
Я предлагаю вам использовать угловой момент для всех связанных с датой событий для интерфейса и момента для части контроллера.
Вы должны хранить все время в качестве UTC в бэкэнд, а затем по интерфейсу вы можете установить часовой пояс пользователя во всем мире как
app.constant('angularMomentConfig', {
'timezone' : <user timezone>
});
Показывать время UTC теперь на интерфейсе, не беспокоясь о часовом поясе (убедитесь, что все переменные являются либо moment
либо объектом Date
):
<td ng-bind="flight.departure_at| amDateFormat:'HH:mm'"></td>
Как указано в другой теме о персонализации часовых поясов для пользователя - я нашел, что это очень полезно при работе с часовыми поясами в Angular. (qaru.site/questions/310503/...)
module.config(['$provide', function($provide) {
var DEFAULT_TIMEZONE = 'GMT';
$provide.decorator('dateFilter', ['$delegate', '$injector', function($delegate, $injector) {
var oldDelegate = $delegate;
var standardDateFilterInterceptor = function(date, format, timezone) {
if(angular.isUndefined(timezone)) {
timezone = DEFAULT_TIMEZONE;
}
return oldDelegate.apply(this, [date, format, timezone]);
};
return standardDateFilterInterceptor;
}]);
}]);
Этот стандарт называется ISO-8601, а формат: YYYY-MM-DDTHH:mm:ss.sssZ
'T'
- это просто разделитель между датой и временем в формате ISO-8601.
'Z'
- это нулевой часовой пояс (вы получаете 12:00, потому что он конвертируется в ваш часовой пояс)
мы можем использовать такой синтаксис,
var date = new Date('2016-05-04T19:00:00.000Z');
console.log(date.getUTCHours()); // Hours - 19
console.log(date.getUTCMinutes()); //0
console.log(date.getUTCSeconds());// 0
console.log(Date.parse(date));
console.log(new Date(Date.parse(date)));
ИЛИ
Date.parse(DATE)
для получения времени в стандартном формате времени