节点错误地由Node.js识别夏令时

时间:2014-09-09 21:02:47

标签: javascript node.js timezone dst

我遇到时区,DST和Node.js的问题。它无法正确识别DST效果。我的操作系统是Windows 8.1,并且具有时区值和DST设置良好。我尝试了这两种方法:

1)节点的日期对象

我在Node Prompt中键入以下代码,并以斜体显示答案:

new Date()

Tue Sep 09 2014 18:42:36 GMT-0200(Horáriobrasileirodeverão(巴西夏令时))

然而,巴西的夏令时开始于10月19日,我们现在不在夏令时。因此,小时从现在起1小时后移动。

2)节点时间

我从npm获得了节点时间包,以便能够更改时区。在代码中:

time = require('time');
dateFormat = require('dateformat');

now = time.Date();
console.log(dateFormat(now.setTimezone('America/Sao_Paulo').getTime(), "yyyy-mm-dd HH:MM:ss Z"))

因此,我得到了

2014-09-09 18:42:36 GMT-0200

巴西正常时区是GMT-0300。小时也是1小时的转移。

我做错了吗?有解决方法吗?

1 个答案:

答案 0 :(得分:1)

节点时间包does not work on Windows。我甚至无法安装它,所以我不确定你是怎么做的。你应该卸载它。

如果您需要支持Node(或浏览器)中的非本地时区,建议moment.js使用moment-timezone插件。

在Windows上运行new Date()并为巴西设置时区,我得到了正确的输出。

Time Zone Settings

tzutil output

node output

唯一可以解释您的结果的是如果时区注册表设置被修改 - 但是您还会在任务栏上的系统时钟中看到错误的时间。所以我很抱歉,但我不能复制它的那一部分。