时刻到目标时区问题

时间:2016-05-05 16:25:44

标签: angularjs fullcalendar momentjs

我有一个在BST中从fullcalendar生成的moment.js对象,如下所示:

console.log(momentSelected)
//Moment {_isAMomentObject: true, _isUTC: true, _offset: 0, _locale: f, _d: Tue May 03 2016 01:00:00 GMT+0100 (BST)…}

我不想要BST时间,但是看起来像这样的UTC时间:

console.log(momentSelected.format('YYYY-MM-DD HH:mm Z'));
//2016-05-03 00:00 +00:00 

现在我需要将其转换为Date对象:

$scope.date = new Date(momentSelected.format('YYYY-MM-DD HH:mm Z'));
console.log($scope.date);
//Wed May 04 2016 01:00:00 GMT+0100 (BST) 

最后一个输出错了......我想要Wed May 04 2016 00:00:00+00:00 (UTC)

1 个答案:

答案 0 :(得分:3)

您可以使用时刻对象上的Date函数创建toDate对象。

$scope.date = momentSelected.toDate();

但是,您必须认识到Date对象的性质是始终在内部表示UTC,其toString函数始终反映代码运行的本地时区。

如果您当地的时区是英国(在夏令时间GMT和BST之间交替),那么无论您如何创建,(UTC)生成的字符串都无法获得console.log($scope.date);时间那个日期。

这就是为什么最好使用moment format函数并直接显示该字符串。 moment可以反映UTC,当地时间和其他时区。 Date对象不能。

此外,您应该不关注moment对象的下划线前缀内部字段。请改用公共API。请参阅moment user guide