web*_*rgm 111
根据这个谷歌组线程,您可以在调用任何日期函数之前设置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)'
Run Code Online (Sandbox Code Playgroud)
之后您无法更改时区,因为那时Node已经读取了环境变量.
小智 51
至少在Linux环境中似乎对我有用的另一种方法是运行你的Node.js应用程序,如下所示:
env TZ='Europe/Amsterdam' node server.js
Run Code Online (Sandbox Code Playgroud)
这至少应该确保从一开始就正确设置了时区.
Lau*_*dou 28
不幸的是,设置process.env.TZ不能很好地工作 - 基本上,当改变有效时,它是不确定的.
因此,在启动节点之前设置系统的时区是唯一合适的选择.
但是,如果您不能这样做,则应该可以使用节点时间作为解决方法:在本地或UTC时间获取您的时间,并将它们转换为所需的时区.请参阅如何在Nodejs中使用时区偏移量?详情.
小智 25
以下是在不使用任何外部模块的情况下在NodeJ中获取自定义时区日期时间的100%工作示例
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);Run Code Online (Sandbox Code Playgroud)
Mar*_*uiz 14
env TZ='Europe/Amsterdam' node server.js来自@uhef 的解决方案适用于您的应用程序无法使用分叉进程,但是当您使用分叉进程时,特别是当您使用gulp等构建工具启动应用程序时,该命令gulp将采用env值,但是由gulp not(你的应用程序)创建的过程.
要解决这个问题,你必须这样做:
$ export TZ="Europe/Amsterdam"; gulp myTask
Run Code Online (Sandbox Code Playgroud)
这将为TZ您正在处理的控制台中启动的所有进程设置环境变量,包括在同一控制台中执行gulp命令后执行的所有子后续进程,而无需export TZ="Europe/Amsterdam";再次使用前缀执行它们.
Ali*_*aei 11
只需在您的主文件中设置环境变量,如 index.js 或 app.js 或 main.js 或任何您的文件名:
process.env.TZ = "Asia/Tehran";
Run Code Online (Sandbox Code Playgroud)
这将设置将在整个节点应用程序中使用的时区
设置服务器时区并使用NTP同步.这是一个更改服务器时间的更好解决方案.
列出时区
timedatectl list-timezones
Run Code Online (Sandbox Code Playgroud)
设置时区
sudo timedatectl set-timezone America/New_York
Run Code Online (Sandbox Code Playgroud)
验证时区
timedatectl
Run Code Online (Sandbox Code Playgroud)
我更喜欢将UTC时区用于我的服务器和数据库.任何转换都必须在客户端上处理.我们可以在客户端使用moment.js.
维护很多实例也很容易,
从 Node 13 开始,您现在可以重复设置process.env.TZ,它将反映在新 Date 对象的时区中。我不知道我是否会在生产代码中使用它,但它在单元测试中肯定有用。
> process.env.TZ = 'Europe/London';
'Europe/London'
> (new Date().toString())
'Fri Mar 20 2020 09:39:59 GMT+0000 (Greenwich Mean Time)'
> process.env.TZ = 'Europe/Amsterdam';
'Europe/Amsterdam'
> (new Date().toString())
'Fri Mar 20 2020 10:40:07 GMT+0100 (Central European Standard Time)'
Run Code Online (Sandbox Code Playgroud)
您可以通过将环境变量设置为TZ来强制 Node.js 进程时区UTC
因此所有时间均以 UTC+00:00 测量
完整列表: https: //en.wikipedia.org/wiki/List_of_tz_database_time_zones
示例 package.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这个帖子很旧,但我认为这会帮助像我这样从谷歌登陆这里的任何人。
在 GAE Flex (NodeJs) 中,你可以在 app.yaml 文件中设置环境变量 TZ(管理应用程序中所有日期时区的变量),我在这里给你一个例子:
应用程序.yaml
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
Run Code Online (Sandbox Code Playgroud)
以下是将Node.js应用程序部署到Amazon AWS Elastic Beanstalk的答案.我还没有在其他任何地方看到这个记录:
在Configuration -> Software -> Environment Properties,只需设置键值对TZ和您的时区,例如America/Los Angeles,并应用更改.
您可以通过new Date().toString()在Node应用程序中输出并注意时区后缀来验证效果.
您只需在启动应用程序时进行设置即可。
{
"scripts": {
"start:timezone": "TZ='utc' node index.js",
"start": "TC=$tz node index.js"
}
}
Run Code Online (Sandbox Code Playgroud)
在您的 CI 中或您想要启动应用程序的任何地方,您可以像这样静态运行它,npm run start:timezone或者动态地将您的时区传递给进程,像npm run start utc
另一种方法可能是将其设置在应用程序的入口点中,如下所示:
process.env.TZ = "UTC";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134063 次 |
| 最近记录: |