与Moment.js的Heroku时区问题

时间:2014-04-19 08:09:09

标签: javascript node.js heroku momentjs

在我的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 );

3 个答案:

答案 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/