【问题标题】:Reading UTC time strings读取 UTC 时间字符串
【发布时间】:2016-04-18 18:01:08
【问题描述】:

您好,我正在尝试使用 moment.js 读取一些 UTC 数据字符串。

例如

date1 = moment.utc("160114224512Z").format('YYYY-MM-DD HH:mm:ss');
console.log(date1)

但是,这总是会引发无效日期错误

【问题讨论】:

  • 这应该会引发语法错误。
  • 不,我得到“无效日期”
  • 用那个准确代码?除非您使用某种预解析器,否则我非常怀疑; 160114224512Z 是语法错误。
  • 不,肯定是语法错误。我希望你真的有引用它,例如moment.utc("160114224512Z")... 但正如你在问题中所说的那样,这是一个语法错误。
  • 是的,更新了缺失的引号以反映真实代码。

标签: javascript momentjs


【解决方案1】:

如果您指定 xX 令牌,Moment 将接受以秒和毫秒为单位的 unix 时间戳作为字符串。实际上,您甚至不需要去除 Z - 与 xX 标记相关的正则表达式正在寻找一个数字,因此默认情况下它会忽略 Z。

我认为你有毫秒,所以你会使用小的 x 令牌,如下所示:

moment.utc("160114224512Z", 'x').format('YYYY-MM-DD HH:mm:ss');
"1975-01-28 04:10:24"

看起来对吗?

作为补充说明,为了清晰起见,去掉 Z 可能很好,即使您不必这样做。

【讨论】:

    【解决方案2】:

    我将假设您有未显示的报价,例如:

    date1 = moment.utc("160114224512Z").format('YYYY-MM-DD HH:mm:ss');
    // Note -----------^-------------^
    console.log(date1)
    

    问题很简单:这不是我见过的任何格式的有效日期/时间字符串。例如,它肯定不是 ISO-8601。

    看起来类似于 1975 年 1 月 28 日的秒数,因为它只是一个数字,而且它太大而不能成为毫秒数(除非你真的有一个日期在 7043 年)。

    如果是自时代以来的秒数,请放弃 Z 并将其用作数字:

    date1 = moment.utc(160114224512).format('YYYY-MM-DD HH:mm:ss');
    

    【讨论】:

      【解决方案3】:

      字符串 160114224512Z 不是有效的 UTC 时刻格式,也不是有效的时刻格式。

      我会建议你指定你的输入格式,我会这样做:

      moment.utc(160114224512, 'x').format('YYYY-MM-DD HH:mm:ss')

      【讨论】:

        猜你喜欢
        • 2016-10-11
        • 2021-03-12
        • 1970-01-01
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        • 2011-08-10
        • 2014-11-24
        • 2018-05-25
        相关资源
        最近更新 更多