在我的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 );
答案 0 :(得分:0)
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
答案 1 :(得分:0)
因为您使用moment-timezone指定了一个命名时区,所以在本地计算机和服务器之间产生不同结果的原因只有两个:
在一个或两个设备上未正确设置时钟。可能Heroku的时钟很好,所以请检查一下。
您没有将任何时区数据加载到时刻时区。在这种情况下,较旧版本的时刻 - 时区会无声地回落到当地时间。较新的版本会出错。
你应该使用&#34; with-data&#34;您通过moment.tz.add
函数感兴趣的分发或加载时区数据。
由于这个问题写于2014年,这可能是第二个问题。
答案 2 :(得分:-1)
您正在部署的目标计算机可能是UTC,您可能想要设置它或使用Moment Timezone。 http://momentjs.com/timezone/