【问题标题】:MomentJS not converting date correctlyMomentJS 没有正确转换日期
【发布时间】:2016-05-20 02:19:24
【问题描述】:

我从 Mongolab 获取记录,格式为:"2016-02-07T04:11:27.667Z"

为了显示日期,我将它们转换为 MM-DD-YYYY 以使它们更易于阅读:

obj.converted_date = moment(obj.date).format('MM-DD-YYYY');

出于某种原因,它将 2/7/2016 的记录转换为 2/6/2016:

converted_date: "02-06-2016"
date: "2016-02-07T04:11:27.667Z"

为什么会这样?

【问题讨论】:

  • 检查您的时区。
  • "2/6/2016" 是模棱两可的,最好使用像 "6-Feb-2016" 或类似的名称,而不是数字。

标签: javascript angularjs mongodb date momentjs


【解决方案1】:

发生这种情况是因为日期以“当地时间”而不是“UTC”表示,除非您要求:

 moment(obj.date).utc().format('MM-DD-YYYY');

因此,差异由您配置的时区调整日期来表示。

请参阅文档中的 UTC

【讨论】:

  • 所以 Moment 假设我从 Mongo 检索到的时间在本地。所以 Moment 的 utc() 转换为 UTC -> local 对吗?
  • @Growler Mongo 始终以 UTC 存储。 “格式化”日期显示为“本地”是 momentjs 的默认操作。此外,即使您向 Mongo 发送本地时间,它仍会存储为 UTC。
  • Blakes,我将此更新推送到实时 AWS EC2 服务器。此代码修复出现在服务器上,但日期范围再次缺少第二天的记录。 EC2 实例似乎配置为UTC 时间。为什么会出现这个问题?
  • @Growler 听起来你有另一个不同背景的问题。 Ask another question 显示您的问题的全部细节。只是在您的简短描述中,这似乎有所不同,并且可能与您的数据有关。
【解决方案2】:

由于末尾有Z,您的时间以UTC 表示。如果您希望它是当地时间,则不应使用"2016-02-07T04:11:27.667Z",而应使用"2016-02-07T04:11:27.667"

或者,正如布雷克七号建议的那样,您可以以 UTC 显示时间,它会向您显示相同的时间,而不是服务器本地时区的时间偏移量。

【讨论】:

    猜你喜欢
    • 2020-11-15
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多