【问题标题】:How to parse date string from database without time shift?如何在没有时移的情况下从数据库中解析日期字符串?
【发布时间】:2016-07-04 08:28:10
【问题描述】:

我从数据库中获取2016-07-13T00:00:00.000Z 字符串并使用moment.js 将其转换为MM/DD/YYYY 格式,如下所示:

result = moment('2016-07-13T00:00:00.000Z').format('MM/DD/YYYY');

打印 2016 年 7 月 12 日,但我期待 2016 年 7 月 13 日。 本地 Linux 时区是 America/New_York。 date 命令打印此Mon Jul 4 04:28:19 EDT 2016

【问题讨论】:

标签: javascript node.js date momentjs


【解决方案1】:

您拥有的日期采用 UTC 格式,由末尾的 z 表示。

当您使用默认时刻构造函数moment() 时,它会将您传递给它的时间从指定的偏移量(在本例中为UTC)转换为机器的本地时间。这就是为什么你的日期正在改变。因为这是一个 UTC 日期,所以要保持它完全相同,您可以使用 moment.utc()

moment.utc('2016-07-13T00:00:00.000Z').format('MM/DD/YYYY');
"07/13/2016"

另外,parseZone 也可以:

moment.parseZone('2016-07-13T00:00:00.000Z').format('MM/DD/YYYY');
"07/13/2016"

有关所有构造函数的详细信息,请参阅parsing guidethis blog post

【讨论】:

    【解决方案2】:

    您应该使用 momentjs 时区:http://momentjs.com/timezone/

    yourdate = moment.tz("2016-07-13T00:00:00.000Z", "America/New_York");
    alert(yourdate.format('MM/DD/YYYY'));
    

    这应该会在输出中为您提供正确的日期。

    【讨论】:

    • moment.tz('2016-07-13T00:00:00.000Z', 'America/New_York').format('MM/DD/YYYY'); 仍然打印'07/12/2016'
    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多