Javascript 如何在Nodejs中使用时区偏移?

Javascript 如何在Nodejs中使用时区偏移?,javascript,node.js,datetime,timezone,Javascript,Node.js,Datetime,Timezone,我需要下一个流程: var a = new Date(1337324400000, 'Europe/Amsterdam'); //+2h console.log(a); // for example 12:00 Mon ... a.setTimeZone('Europe/Kiev'); //+3h console.log(a); // 13:00 Mon ... nodejs utils api中是否存在这种可能性?更新: 现在还有一个:) 启用时区,替换库存JavaScript日期。 Dat

我需要下一个流程:

var a = new Date(1337324400000, 'Europe/Amsterdam'); //+2h
console.log(a); // for example 12:00 Mon ...
a.setTimeZone('Europe/Kiev'); //+3h
console.log(a); // 13:00 Mon ...
nodejs utils api中是否存在这种可能性?

更新: 现在还有一个:)

启用时区,替换库存JavaScript日期。 Date对象是与JS Date兼容的API,具有 相同的getter和setter方法——在任何 适用于正常的JavaScript日期


不,没有

但是您可以使用矩.js来简化

您仍然需要知道每个偏移量,因此需要像
{“Europe/Amsterdam”:2,“Europe/Kiev”:3}

这样的映射,您可以使用,如下所示:

var time = require('time');

var a = new time.Date(1337324400000);

a.setTimezone('Europe/Amsterdam');
console.log(a.toString()); // Fri May 18 2012 09:00:00 GMT+0200 (CEST)
a.setTimezone('Europe/Kiev');
console.log(a.toString()); // Fri May 18 2012 10:00:00 GMT+0300 (EEST)

Moment.js现在有

安装

npm install --save moment-timezone
var Moment = require('moment-timezone');
Moment().tz('America/Los_Angeles').format();
使用

npm install --save moment-timezone
var Moment = require('moment-timezone');
Moment().tz('America/Los_Angeles').format();

请参阅npm中的时区包。它内置了所需的一切,是纯JS的,似乎是可用的最佳时区处理库

  • Timezone是纯JavaScript中的MicroJS库,没有提供时区感知的日期数学和日期格式的依赖项
  • 时区使用IANA数据库确定世界任何地方自标准化时间开始的任何时间的正确挂钟时间
  • 时区格式化日期,完全实现strftime格式,包括GNU日期扩展
  • 时区使用RFC 3999日期字符串表示POSIX时间和本地时间中的时间
  • Timezone是一个功能齐全的基于标准的纯JavaScript时间库,用于3K以下的小型化和Gzip

使用它是在不同时区解析、验证和更改时间的最佳选项

这是否意味着我需要创建带有偏移量的文件,并计算夏令时?是的,据我所知,您需要自己做这件事,没有现成的解决方案。有一个,叫做节点时间,请检查我的答案。有趣的解决方案,但它确实改变了当前的进程时区。我不能接受。@Stefan,将
进程.env.TZ
设置为一些值,例如
美国/纽约
美国/芝加哥
,然后观察时区的变化。如果您像我们一样部署在Azure上,节点时间不是一个好选项。您在编译桥时会遇到问题。。。更好的选择是时区js,因为它是纯js。它的性能也要好得多。@oligofren那么您不应该将此作为一个答案发布吗?@weisjohn,在正在运行的节点进程中设置process.env.TZ将给出危险的错误结果,因为libc已经初始化了。相反,它需要在流程开始之前设置。