flight.departure_at是UTC格式2016-05-04T19:00:00.000Z
当我在页面中显示此表达式时,
它的格式完全出乎意料。
为什么12:00会出来?怎么会?
我还想知道如何在全局范围内保留所有时间格式,而无需在任何地方添加选项。它将使整个应用程序易受攻击
Departure_time: {{flight.departure_at}} ||| {{flight.departure_at | date: 'HH:mm'}}
Departure_time: 2016-05-04T19:00:00.000Z ||| 12:00
答案 0 :(得分:0)
此标准称为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)));
OR
Date.parse(DATE)
以标准时间格式获取时间
答案 1 :(得分:0)
正如另一个关于为用户个性化时区的主题所述 - 我发现这在处理Angular中的时区时非常有用。 (https://stackoverflow.com/a/35161107/3585278)
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;
}]);
}]);
答案 2 :(得分:0)
我建议您使用Angular moment表示前端的所有日期时间相关内容,并使用moment作为控制器部分。
您应该将所有时间存储在后端的UTC中,然后在前端,您可以将用户的时区全局设置为
app.constant('angularMomentConfig', {
'timezone' : <user's timezone>
});
现在在前端渲染UTC时间而不用担心时区(确保所有变量都是moment
或Date
对象):
<td ng-bind="flight.departure_at| amDateFormat:'HH:mm'"></td>