![]() |
魁梧的灭火器 · 只需要给出过去10年这一天的日期 - CSDN文库· 1 月前 · |
![]() |
英姿勃勃的火柴 · PHP获取上周、本周、上月、本月、本季度、上 ...· 1 月前 · |
![]() |
另类的扁豆 · PHP中使用date获取上月最后一天出现的问 ...· 1 月前 · |
![]() |
英姿勃勃的勺子 · hexo fluid主题折腾 - ...· 4 月前 · |
![]() |
直爽的乒乓球 · vue 判断两个对象的vaue是否相同 - ...· 5 月前 · |
![]() |
买醉的蛋挞 · 未成年人模式要来了!覆盖范围由APP扩至移动 ...· 1 年前 · |
![]() |
低调的登山鞋 · 用qt代码怎样编写图片保存格式[qt4.6] ...· 1 年前 · |
![]() |
精明的开心果 · Mongoose,更新对象数组中的值_nod ...· 1 年前 · |
如何在node.js中设置默认时区?
根据 this google group thread ,您可以在调用任何日期函数之前设置TZ环境变量。我刚测试过它,它工作正常。
> process.env.TZ = 'Europe/Amsterdam'
'Europe/Amsterdam'
> d = new Date()
Sat, 24 Mar 2012 05:50:39 GMT
> d.toLocaleTimeString()
'06:50:39'
'Sat Mar 24 2012 06:50:39 GMT+0100 (CET)'
但是,您不能在以后更改时区,因为到那时Node已经读取了环境变量。
不幸的是,
setting
process.env.TZ
doesn't work really well
-基本上是不确定的变化将何时生效)。
因此,在启动节点之前设置系统的时区是您唯一合适的选择。
但是,如果您不能做到这一点,应该可以使用 node-time 作为解决方法:获取本地或UTC时间格式的时间,并将其转换为所需的时区。详情请参见 How to use timezone offset in Nodejs? 。
你可以带上 moment timezone 。它可以让你设置你的位置,也照顾到夏令时。
另一种方法似乎至少在Linux环境下对我有效,那就是像这样运行你的Node.js应用程序:
env TZ='Europe/Amsterdam' node server.js
这至少应该确保从一开始就正确设置了时区。
下面是一个在NodeJs中获取自定义时区日期时间的100%工作示例,无需使用任何外部模块:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
console.log(nDate);
设置服务器时区并使用NTP同步。这里有一个更改服务器时间的更好的解决方案。
列出时区
timedatectl list-timezones
设置时区
sudo timedatectl set-timezone America/New_York
验证时区
timedatectl
对于我的服务器和数据库,我更喜欢使用UTC时区。任何转换都必须在客户端处理。我们可以在客户端使用moment.js。
维护多个实例也会很容易,
有时,您可能在别处的虚拟服务器上运行代码-当运行NODEJS或其他版本时,代码可能会变得混乱。
这里有一个修复,可以让你轻松地使用任何时区。
Check here for list of timezones
只需将您的时区短语放在格式行的括号内。
在本例中-我将EPOCH转换为case。
//RE: https://www.npmjs.com/package/date-and-time
const date = require('date-and-time');
let unixEpochTime = (seconds * 1000);
const dd=new Date(unixEpochTime);
let myFormattedDateTime = date.format(dd, 'YYYY/MM/DD HH:mm:ss A [America/New_York]Z');
let myFormattedDateTime24 = date.format(dd, 'YYYY/MM/DD HH:mm:ss [America/New_York]Z');
我使用npm包unix-system-timezone
您可以使用库tzdata配置全局时区:
npm install tzdata -y
使用变量设置环境后,例如: TZ=America/Bogota
在您的项目中进行测试:
new Date()
我希望能帮助你
现在,您可以重复设置
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)'
您可以通过将环境变量
TZ
设置为
UTC
来强制使用Node.js进程时区
所以所有的时间都是用UTC+00:00来计算的
完整列表: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
示例package.json:
{