momentjs utcOffset()没有给出正确的时间

时间:2016-05-16 19:47:20

标签: angularjs datetime momentjs

我之前根据存储在用户个人资料中的时区在我的应用中实施了日期。据我所知,这在最初实施时正常工作。

我显示的数据库中存储的所有日期都是UTC,这意味着当我保存日期时(在C#中),我使用DateTime.UtcNow

以下是我在Angular中使用的momentjs代码,用实际值渲染我的日期:

moment.utc('2016-05-16T19:14:06.51').utcOffset('-05:00:00').format('M/D/YYYY h:mma');

-05:00:00偏移量适用于东部时间。我期待上面指定的UTC日期导致下午3:15的显示,而是显示下午2:15。

要仔细检查我没有使用错误的日期值,我进入了MS SQL Management Studio并运行了返回SELECT GETUTCDATE()的{​​{1}}。现在是下午3点44分,但它正在使用上面的momentjs代码渲染下午2:44。

发生了什么事?我错过了一些处理夏令时的时刻代码吗?

1 个答案:

答案 0 :(得分:0)

一些事情:

  • -05:00:00不是时区,而是偏移量。请阅读the timezone tag wiki中的“时区!=偏移”。
  • 使用utcOffset始终设置相同的固定偏移量,因此您收到的值对于该偏移量是正确的。
  • 当你只提供一个偏移时,它无法知道你的意思是美国东部时间,因为许多其他时区在不同的时间点使用相同的偏移量。
  • 使用moment-timezone插件,您可以使用the tzdb中的America/New_York标识符指定东部时间。您更新的代码如下:

    moment.utc('2016-05-16T19:14:06.51').tz('America/New_York').format('M/D/YYYY h:mma');