如何在node.js中设置默认时区?
当前回答
这个作品; https://stackoverflow.com/a/53282481/17700714
var date = new Date('2016-08-25T00:00:00')
var userTimezoneOffset = date.getTimezoneOffset() * 60000;
new Date(date.getTime() - userTimezoneOffset);
其他回答
对于那些将Node.js应用程序部署到Amazon AWS Elastic Beanstalk的人,这里有一个答案。我还没有在其他地方看到过这样的记录:
在Configuration -> Software -> Environment Properties下,简单地设置键值对TZ和您的时区,例如America/Los Angeles,然后应用更改。
你可以通过在Node应用程序中输出new Date(). tostring()来验证效果,并注意时区后缀。
根据这个谷歌组线程,可以在调用任何日期函数之前设置TZ环境变量。刚刚测试了一下,它可以工作。
> process.env.TZ = 'Europe/Amsterdam'
'Europe/Amsterdam'
> d = new Date()
Sat, 24 Mar 2012 05:50:39 GMT
> d.toLocaleTimeString()
'06:50:39'
> ""+d
'Sat Mar 24 2012 06:50:39 GMT+0100 (CET)'
但是以后不能更改时区,因为那时Node已经读取了环境变量。
不幸的是,设置process.env.TZ工作得不是很好——基本上不确定什么时候更改会生效)。
因此,在启动节点之前设置系统时区是唯一正确的选择。
但是,如果您不能这样做,应该可以使用节点时间作为一种变通方法:以本地时间或UTC时间获取时间,并将它们转换为所需的时区。参见如何在Nodejs中使用时区偏移?获取详细信息。
更新node.js v13版本
正如@Tom指出的,现在v13中内置了完整的icu支持。因此可以省略设置步骤。您仍然可以自定义在运行时构建或使用icu的方式:https://nodejs.org/api/intl.html
对于Windows上的node.js,您可以执行以下操作:
如果已经安装full-icu,请安装它,它将正确应用日期区域设置 NPM I全icu 或全局:NPM I -g full-icu 在代码中使用toLocaleString(),例如: 新的日期()。toLocaleString('en-AU', {timeZone: '澳大利亚/墨尔本'}) 这将产生类似于:25/02/2019,3:19:22 pm。如果你喜欢24小时,'en-GB'将产生:25/02/2019,15:19:22
对于node.js作为Azure web应用程序,除了WEBSITE_TIME_ZONE的应用程序设置外,你还需要将NODE_ICU_DATA设置为例如<你的项目>\node_modules\full-icu,当然,在你完成npm i full-icu之后。不建议在Azure上全局安装包,因为该目录是临时的,可能会被删除。
裁判: 1. NodeJS没有正确应用日期区域设置
你也可以用intl选项构建node.js,更多信息在这里
我使用这个NPM包unix-system-timezone
推荐文章
- 很好的初学者教程socket.io?
- CALL_AND_RETRY_LAST分配失败-进程内存不足
- 在Ubuntu上安装Node.js
- 使用express.js代理
- 在c#中创建一个特定时区的DateTime
- Node -使用NODE_MODULE_VERSION 51根据不同的Node.js版本编译
- RabbitMQ / AMQP:单队列,同一消息的多个消费者?
- 如何在JavaScript中获得时区名称?
- Node.js同步执行系统命令
- 禁用包的postinstall脚本
- Node.js上的html解析器
- 错误:无法找到模块“webpack”
- 如何改变时间和时区在iPhone模拟器?
- 在node.js中使用async / await文件系统
- NodeJS -用NPM安装错误