【问题标题】:heroku moment() js unix timestamp is incorrectheroku moment() js unix 时间戳不正确
【发布时间】:2017-08-12 09:23:59
【问题描述】:

我在 Heroku 服务器上遇到问题。在我的本地服务器上使用 moment.js 将 unix 时间戳保存到我的数据库正常运行。然而,在 Heroku 上,时间戳落后 23 小时,四舍五入到最接近的小时。

dateProvided = Number(moment($('#dateProvided').val(), 'DD/MM/YYYY').unix())

$('#dateProvided').val() 提供的值是“12/08/2017”。本地和 Heroku 服务器的 unix 时间戳均为“1502492400”,转换时为“08/11/2017 @ 11:00pm (UTC)”。

返回值

当我想要已经保存的值时,代码是:

moment.unix(dateProvided).format('DD/MM/YYYY')

浏览器

上面的代码在浏览器上返回正确的日期“12/08/2017”。

Heroku 服务器

上面的代码在 Heroku 服务器上返回了错误的日期“11/08/2017”。

【问题讨论】:

  • here 所述:默认情况下,moment 解析并显示为当地时间。,因此您的$('#dateProvided').val() 将被解释为当地时间(执行代码的环境时间),也许这种行为会导致您的问题。
  • $('#dateProvided').val() 返回的值是“12/08/2017”,所以看起来没问题。 Heroku 默认设置为 UTC。这就像瞬间认为我在亚洲的时区之类的。
  • moment($('#dateProvided').val(), 'DD/MM/YYYY').unix()返回的值是多少?此代码在哪里执行(浏览器/节点)?您的预期结果是什么?
  • @VincenzoC 感谢您的回复,我将编辑问题。
  • 关键是将unix时间戳保存与提供的日期相同,即“12/08/2017”,因为服务器不会知道客户端本地时区,除非我将该时区作为数据传递不必要的。

标签: heroku momentjs unix-timestamp


【解决方案1】:

问题是我的本地时区被用作 unix 时间戳,而 Heroku 位于 UTC 时区。因此,在保存 Heroku 时是不同的。解决办法是:

moment.utc(value, 'DD/MM/YYYY').unix()

这样可以确保保存时间戳时时区与 Heroku 相同。

【讨论】:

    【解决方案2】:

    使用模块 moment-timezone,因为它处理世界各地所有类型的时区。它解决了我的 Heroku 日期/时间问题。

    Example: 
    const date = moment().tz('Europe/London').format('DD/MM/YYYY');
    

    更多信息:https://momentjs.com/timezone/

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 2011-06-08
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多