【问题标题】:Moment.js and Unix Epoch ConversionMoment.js 和 Unix 纪元转换
【发布时间】:2013-08-04 01:22:11
【问题描述】:

我有一个 Web 服务,它返回如下字符串的日期:

/Date(1377907200000)/

我使用 MomentJS 将其解析为 moment 对象。

moment("/Date(1377907200000)/") => Fri Aug 30 2013 20:00:00 GMT-0400

这一切都很好。但是当我在对象上调用unix() 时,我得到的值是1377907200。然而,这对应于Fri Jan 16 1970 17:45:07 GMT-0500。我可以乘以 unix() 返回的值,但这对我来说似乎很草率。我怀疑我通过调用unix() 所做的并不是我想的那样。调用unix() 时是否需要指定某种格式?我在这里错过了什么?

JSFidle showing the conversion to moment and then back.

【问题讨论】:

  • 你不需要这样转换为日期对象,moment可以处理moment(1377907200000)就好了。很好奇为什么网络服务会返回这样的日期。
  • 我们使用返回它的网络服务——这是因为 API 的目标消费者通常是 JavaScript,它“以毫秒为单位”而不是秒。它针对最有可能的消费者。

标签: javascript date epoch momentjs


【解决方案1】:

meagar 提供的答案是正确的,从严格的 JavaScript / Unix 时间角度来看。但是,如果您只乘以 1000,您将失去数据中可能存在的任何亚秒级精度。

Moment.js 提供了两种不同的方法,如 in the docs 所述。 .unix() 以秒为单位返回值。它实际上是除以 1000 并截断任何小数。你想使用.valueOf() 方法,它只返回毫秒而不做修改。

【讨论】:

  • 感谢您提供更多详细信息。至少对于这个不需要的项目,因为粒度只有一天。
  • 哦,实际上,我看到这完全符合我的预期。我宁愿不以任何方式修改该值,因此您的答案实际上是理想的。
  • 抱歉,.valueOf() 会调用什么对象?
  • @chovy - 这是任何moment 对象上的方法,例如moment().valueOf()
  • @MattJohnson 感谢您的洞察力!一直在敲我的头关于这个问题! :-)
【解决方案2】:

在 JavaScript 领域,当您将 Date 转换为整数时,您会得到自 unix 纪元以来的 milli 秒数。传统的 Unix 时间是自纪元以来的数。乘以 1000 是正确的选择。

【讨论】:

  • 这是有道理的。谢谢你的解释。
  • 或者只是moment("/Date(1377907200000)/").toDate().getTime()
【解决方案3】:

此解决方案帮助我使用 moment.js 将格式添加到 Epoch 日期。

moment(1377907200000).format("DD MMM YYYY hh:mm A")

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 2020-09-29
    • 2017-04-06
    • 2017-12-20
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2012-11-07
    相关资源
    最近更新 更多