如何在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"前缀执行它们;一次。

其他回答

设置服务器时区并使用NTP同步。 下面是更改服务器时间的一个更好的解决方案。

列出时区

timedatectl list-timezones

设置时区

sudo timedatectl set-timezone America/New_York

确认时区

timedatectl

我的服务器和数据库更喜欢使用UTC时区。任何转换都必须在客户端处理。 我们可以在客户端使用moment.js。

维护多个实例也很容易,

只要在你的主文件中设置环境变量,比如index.js或app.js或main.js或任何你的文件名:

process.env.TZ = "Asia/Tehran";

这将设置将在整个节点应用程序中使用的时区

更新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,更多信息在这里

这里是一个100%工作的例子,在NodeJs中获得自定义时区日期时间,而不使用任何外部模块:

const nDate =新日期()。toLocaleString(“en - us”{ 时区:“亚洲/加尔各答” }); console.log (nDate);

来自@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"前缀执行它们;一次。