繁体   English   中英

与Moment.js的Heroku时区问题

[英]Heroku Timezone Issue with Moment.js

在我的production / heroku应用程序中,下面的代码返回的小时数比在我的开发/本地应用程序中运行时代码返回的小时数多7小时。 为什么是这样?

var startDate = moment.tz("2000-01-01", "America/Edmonton").startOf('day');
var endDate   = moment.tz("America/Edmonton");

hourly_count = parseInt(endDate.diff( startDate, 'hours' ) + 1 );

Heroku存在一些问题。 它会自动将其计算为UTC。

var tms = 1492554237000

console.log(moment(tms).format("YYYY-MM-DD HH:mm:ss"))
console.log(moment.utc(tms).format("YYYY-MM-DD HH:mm:ss"))

当地产出

2017-04-19 06:23:57
2017-04-18 22:23:57

heroku服务器输出

2017-04-18 22:23:57
2017-04-18 22:23:57

我通过调整时间戳来解决它。

if (moment().utcOffset() == -0){
    // for server
    tms += 28800000
}

Heroku服务器输出新

2017-04-19 06:23:57
2017-04-19 06:23:57

因为您使用moment-timezone指定了命名时区,所以在本地计算机和服务器之间产生不同结果的原因只有两个:

  • 未在一个或两个设备上正确设置时钟。 可能Heroku的时钟很好,所以看看你的。

  • 您没有将任何时区数据加载到时刻时区。 在这种情况下,较旧版本的时刻 - 时区会无声地回落到当地时间。 较新的版本会出错。

    您应该使用其中一个“with-data”发行版,或者通过moment.tz.add函数加载您感兴趣的时区数据。

由于这个问题写于2014年,这可能是第二个问题。

您正在部署的目标计算机可能是UTC,您将要设置它或使用Moment Timezone。 http://momentjs.com/timezone/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM