Heroku - NodeJS 无法将日期转换为 UTC

Heroku - NodeJS Cant convert date to UTC

我需要在本地时间创建一个日期并将其转换为 UTC 以保存在数据库中。

我在本地环境和 Heorku 上有以下代码:

// node dateTest.js

var moment = require('moment-timezone');
var timeZone = 'Pacific/Auckland';

var date = moment('20160101235959', 'YYYYMMDDHHmmss').tz(timeZone);

var UTCdate = date.utc().toISOString();

console.log(UTCdate);

当我在本地 运行 时,我得到:

2016-01-01T10:59:59.000Z

哪个是正确的 UTC 时间。但是当我在 Heorku 实例上 运行 它时,我得到:

2016-01-01T23:59:59.000Z

这是末尾带有 Z 的文字日期。

为什么会这样?我想不通。 :(

NodeJS v5.1.0

由于您的应用程序可能 运行 位于世界任何地方,因此 Heroku 应用程序的默认时区是 UTC(因此它在可能处于不同时区的 dynos 之间是一致的)。您可以 运行 以下命令 set a time zone:

heroku config:add TZ="America/Los_Angeles"

我查看了 moment-timezone 的文档,您可以通过两种不同的方式使用它。您可以使用第二种方式代替 utc()。我会按如下方式更改您的代码:

var moment = require('moment-timezone');
var timeZone = 'Pacific/Auckland';

var date = moment.tz('20160101235959', 'YYYYMMDDHHmmss', timeZone);

var UTCdate = date.tz('Greenwich').toISOString();
console.log(UTCdate);