【问题标题】:Moment.js returning wrong dateMoment.js 返回错误的日期
【发布时间】:2013-11-08 01:05:17
【问题描述】:

我正在尝试使用 moment 将 2013 年 10 月 29 日的日期时间转换为这种格式

2013-10-29T00:00:00.000Z

但是当我这样做时

moment('2013-10-29T00:00:00.000Z').format("MMM Do, YYYY")

它返回 2013 年 10 月 28 日,而它应该返回 2013 年 10 月 29 日

如果您对如何解决此问题有一些想法,请告诉我。谢谢

【问题讨论】:

    标签: javascript datetime momentjs


    【解决方案1】:

    如果您想要 UTC 时间,请使用:

    moment.utc('2013-10-29T00:00:00.000')
    

    正如@MattJohnson 指出的那样,使用moment 构造函数会将其转换为本地时间。相反(如果您不想使用utc 方法),您可以将Z 替换为+0。查看字符串日期/时间选项http://momentjs.com/docs/#/parsing/string-format/

    【讨论】:

    • 它确实识别Z,但如果您将它传递给moment 构造函数,它会从UTC 转换为本地时间。除了假设输入值为 UTC 之外,使用 moment.utc 调用会将 result 置于 UTC 中。所以,你写的很好,但你也可以在这里传递Z,或者从OP最初写的.utc()。
    • 似乎使用 +0 偏移量不会将其转换为本地时间。
    【解决方案2】:

    您可以通过以下方式调整时区设置:

    moment('2013-10-29T00:00:00.000Z').zone(0).format("MMM Do, YYYY");
    

    FIDDLE

    继续添加 Matt 的建议,因为它更具语义性。

    moment('2013-10-29T00:00:00.000Z').utc().format("MMM Do, YYYY");
    

    【讨论】:

    • 这会工作,但上下文含义略有不同。您可以考虑将.zone(0) 替换为.utc()。您仍然可以从我这里获得 +1。 :)
    • @MattJohnson 非常好。这就是我跳到文档中提到时区的部分所得到的......
    • 在我看来,这是最好的答案,因为 momentjs 无论如何都能识别“Z”。正如@JeffStorey 目前接受的答案所说,为什么还要费心执行字符串操作来删除“Z”。
    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2013-07-25
    • 2020-01-16
    相关资源
    最近更新 更多