如何在node.js中设置默认时区?
当前回答
来自@uhef的解决方案env TZ='Europe/Amsterdam' node server.js适用于应用程序不能使用fork进程的情况,但当你使用fork进程时,特别是当你使用像gulp这样的构建工具启动应用程序时,命令gulp将接受env值,但gulp创建的进程不(你的应用程序)。
要解决这个问题,你必须做到:
$ export TZ="Europe/Amsterdam"; gulp myTask
这将为您正在使用的控制台中启动的所有进程设置TZ环境变量,包括在同一个控制台中gulp命令后执行的所有子进程,而不需要使用export TZ="Europe/Amsterdam"前缀执行它们;一次。
其他回答
根据这个谷歌组线程,可以在调用任何日期函数之前设置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已经读取了环境变量。
你可以通过将环境变量TZ设置为UTC来强制Node.js进程时区
因此,所有时间都将以UTC+00:00计算
完整名单:https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
示例package.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
另一种至少在Linux环境下对我有用的方法是像这样运行你的Node.js应用程序:
env TZ='Europe/Amsterdam' node server.js
这至少可以确保从一开始就正确地设置了时区。
设置服务器时区并使用NTP同步。 下面是更改服务器时间的一个更好的解决方案。
列出时区
timedatectl list-timezones
设置时区
sudo timedatectl set-timezone America/New_York
确认时区
timedatectl
我的服务器和数据库更喜欢使用UTC时区。任何转换都必须在客户端处理。 我们可以在客户端使用moment.js。
维护多个实例也很容易,
const nDate =新日期()。toLocaleString(“en - us”{ 时区:“亚洲/首尔” }); console.log (nDate);
推荐文章
- “node_modules”文件夹应该包含在git存储库中吗
- 使用package.json在全局和本地安装依赖项
- this.libOptions.parse不是一个函数
- 对嵌套文件夹运行npm install的最好方法是什么?
- 节点Multer异常字段
- 很好的初学者教程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脚本