【发布时间】: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