【问题标题】:moment js is returning wrong formatted values for an iso timestamp时刻 js 为 iso 时间戳返回错误的格式值
【发布时间】:2018-02-02 07:54:16
【问题描述】:

我将 "2018-01-31T22:55:02.907Z" 这个时间戳传递给 moment() 函数,但在格式化日期部分后它返回了错误的值。

console.log(moment("2018-01-31T22:55:02.907Z").format('YYYY-MM-DD'));

这应该返回2018-01-31,而是返回2018-02-01

就像这样,每个日期都增加一天。我怀疑一些基于时区的问题,但我无法弄清楚。

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    您必须在传递时间戳时使用 .utc,如下所示: 如果你这样做:

    console.log(moment("2018-01-31").format('YYYY-MM-DD'));
    

    它会给你想要的结果,但是当你像现在这样传递时间戳时,你应该做的是:

    console.log(moment.utc("2018-01-31T22:55:02.907Z").format('YYYY-MM-DD'));
    

    您还可以看到它是如何工作的:

    console.log(moment({ years:2018, months:0, date:31, hours:22, minutes:55, seconds:02, milliseconds:907}).format('YYYY-MM-DD'));
    

    对于传递时间戳,您应该再次检查文档。 https://momentjs.com/docs/#/parsing/unix-timestamp-milliseconds/

    这也可能是一个有用的链接: https://coderwall.com/p/exrbag/use-momentjs-to-parse-unix-timestamps

    【讨论】:

      【解决方案2】:

      你必须使用moment.utc():

      默认情况下,moment 解析并显示为当地时间。

      如果要解析或显示 UTC 时刻,可以使用 moment.utc() 而不是 moment()

      console.log(moment("2018-01-31T22:55:02.907Z").format('YYYY-MM-DD'));
      console.log(moment.utc("2018-01-31T22:55:02.907Z").format('YYYY-MM-DD'));
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-08
        相关资源
        最近更新 更多