【问题标题】:Using moment.utc() incorrectly converting the date into utc format of "days" format-Moment Javascript使用 moment.utc() 错误地将日期转换为“天”格式的 utc 格式-Moment Javascript
【发布时间】:2019-02-06 06:17:30
【问题描述】:

我正在使用矩库将日期转换为 utc 格式。这是我的日期字符串:

var dateString = "2019-01-31T11:33:16.952+0000";

new Date("2019-01-31T11:33:16.952+0000") // o/p: Thu Jan 31 2019 03:33:16 GMT-0800 (Pacific Standard Time) 由于该日期距今天不到一周,因此我试图显示“n 天前”而不是实际日期的文本。但由于某种原因,当我执行此操作时,未来日期会显示为“6 天前”:

moment.utc("2019-01-31T11:33:16.952+0000").local().fromNow() // shouldnt this display "5 days ago"??

不知道为什么时刻没有正确转换日期,有什么想法可能是错误的吗?

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    我猜(考虑到使用 local() 会转换为您的本地时区,因此会扣除时间,因为您可能处于 -ve TimeZone)this answer 是您所期待的解决方案:

    理想情况下,您希望将 UTC 时间戳从您的服务器传递到 客户端。这并不意味着您必须切换整个服务器 到 UTC,它只是意味着你会从时间转换 在通过 Web 发送数据库之前,将数据库转换为服务器上的 UTC。 当然,如果您实际上以 UTC 存储时间会更好,但是 你说你无法做出正确的改变 现在。但是让我们假设你无法改变 服务器上的任何东西。

    我们还假设您的服务器固定为 UTC-07:00 偏移量。 在现实生活中,这只适用于像亚利桑那这样的地方 不要遵循夏令时。所以如果你在洛杉矶 在太平洋时间,那么您的一些数据基于 UTC-07:00,但是 其中一些基于 UTC-08:00。如果你需要做更多的工作 想用 JavaScript 来做。

    我们还假设输入已经是 ISO8601 中的字符串 格式。 (如果不是,请告诉我,我会调整此代码。)

    var s = "2013-09-11 18:00:00"; // 来自 action.timeStamp

    var actionTime = moment(s + "-07:00", "YYYY-MM-DD HH:mm:ssZ");

    var timeAgo = actionTime.fromNow();您的其他代码没有的原因 工作是因为在第一行,你受到时区的影响 的浏览器。第二行中的区域设置器只是改变了 用于格式化的区域,而不是更改实际时间。

    另外,当您将片刻转储到控制台进行调试时,请确保 您将其格式化以输出。否则你只是在看它 内部属性值,可能直接有意义,也可能没有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      相关资源
      最近更新 更多