使用moment.js格式化用户时区的时间

时间:2017-02-05 14:58:08

标签: javascript phantomjs momentjs

我在PhantomJS和Moment.js上的组合遇到了一些麻烦。我想格式化一个unix时间戳,例如{1}用户在PhantomJS的用户时区。但是,我看到一些奇怪的行为。我的机器时区为allConditionsRef.observeEvent(.value, with: { snapshot in (UTC + 8)。

以下是使用env var 1399089600000

在PhantomJS中运行的
Asia/Hong_Kong

TZ=Asia/Hong_Kong

var moment = require('moment.js');
moment(1399089600000).utc().format('YYYY-MM-DD HH:mm:ss Z');
// "2014-05-03 04:00:00 +00:00" which is ok
moment(1399089600000).local().format('YYYY-MM-DD HH:mm:ss Z');
// "2014-05-04 05:00:00 +25:00" why +25?
moment(1399089600000).format('YYYY-MM-DD HH:mm:ss Z');
// "2014-05-04 05:00:00 +25:00" why +25?

如果未设置TZ=UTC,事情似乎没问题,

moment(1399089600000).utc().format('YYYY-MM-DD HH:mm:ss Z');
// "2014-05-03 04:00:00 +00:00" which is ok
moment(1399089600000).local().format('YYYY-MM-DD HH:mm:ss Z');
// "2014-05-04 04:00:00 +24:00" why +24?
moment(1399089600000).format('YYYY-MM-DD HH:mm:ss Z');
// "2014-05-04 04:00:00 +24:00" why +24?

使用PhantomJS 2.1.1和Moment.js 2.17.1。

感谢。

更新

TZ时,moment(1399089600000).utc().format('YYYY-MM-DD HH:mm:ss Z'); // "2014-05-03 04:00:00 +00:00" which is ok moment(1399089600000).local().format('YYYY-MM-DD HH:mm:ss Z'); // "2014-05-03 12:00:00 +08:00" which is ok moment(1399089600000).format('YYYY-MM-DD HH:mm:ss Z'); // "2014-05-03 12:00:00 +08:00" which is ok = 1500

TZ=Asia/Hong_Kong时,moment(1399089600000).utcOffset() = 1440

TZ=UTC时,moment(1399089600000).utcOffset() = 480

1 个答案:

答案 0 :(得分:0)

当涉及到TZ环境变量时,PhantomJS与Windows不兼容。

momentjs排除在等式之外:

在Windows机器中:

TZ=UTC时,new Date().getTimezoneOffset()会返回错误的-1440

但是在Linux机器上(我测试的时候是Ubuntu):

TZ=UTC时,new Date().getTimezoneOffset()会返回正确的0

我测试了Linux上TZ值的其他变体,它们都是正确的。