我使用的是12.14.1,在我看来,节点忽略TZ env。变量在许多情况下:
$ TZ=GMT-4 node -e 'console.log(new Date().getTimezoneOffset(), new Date().toString())'
-120 Mon Mar 30 2020 10:10:12 GMT+0200 (Central European Summer Time)这完全是错误的。无论是在GMT+4中(是的,+,怪异的POSIX ),还是返回的时间都不能与我的本地时间相匹配(在时区GMT+2和GMT+4中相同的时间是胡说八道)。
当转换到同一个时区打印时,来自不同时区的时间应该不同:
$ TZ=GMT-2 node -e 'console.log(new Date().getTimezoneOffset(), new Date().toString())'
-120 Mon Mar 30 2020 10:10:14 GMT+0200 (Central European Summer Time)但Node坚持认为它是一样的。
如何可靠地跨平台(Linux、Windows、Mac)设置节点进程的任意时区(不只是UTC和等效时区)?
编辑:
以下是一个正确选项的示例,即它的行为方式:
$ TZ=GMT-4 date
Po 30. března 2020, 12:06:04 GMT
$ TZ=GMT-2 date
Po 30. března 2020, 10:06:09 GMT当转换到同一时区时,来自不同时区的时间必须不同(GMT+4和GMT+2相差2小时)。
发布于 2020-03-30 12:58:29
TZ=GMT后面跟着+/-,从版本10开始,数字就不再起作用了。例如,对于GMT+4,可以使用TZ=Europe/Samara代替。在寻找合适的时区时,要小心选择没有夏令时(DST)的时区。
测试主要节点版本6-13的new Date().getTimezoneOffset(), new Date().toString()打印:
current date : Po 30. března 2020, 14:32:31 CEST
with TZ=GMT-4 : Po 30. března 2020, 16:32:31 GMT
with TZ=UTC : Po 30. března 2020, 12:32:31 UTC
with TZ=GET : Po 30. března 2020, 16:32:31 +04
with TZ=Europe/Samara: Po 30. března 2020, 12:32:31 GET
v6.17.1
with TZ=GMT-4 : -240 'Mon Mar 30 2020 16:32:31 GMT+0400 (GMT)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:31 GMT+0000 (UTC)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:31 GMT+0000 (GET)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:31 GMT+0400 (+04)'
v7.10.1
with TZ=GMT-4 : -240 'Mon Mar 30 2020 16:32:32 GMT+0400 (GMT)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:32 GMT+0000 (UTC)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:32 GMT+0000 (GET)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:32 GMT+0400 (+04)'
v8.17.0
with TZ=GMT-4 : -240 'Mon Mar 30 2020 16:32:32 GMT+0400 (GMT)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:33 GMT+0000 (UTC)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:33 GMT+0000 (GET)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:33 GMT+0400 (+04)'
v9.11.2
with TZ=GMT-4 : -240 'Mon Mar 30 2020 16:32:33 GMT+0400 (GMT)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:33 GMT+0000 (UTC)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:33 GMT+0000 (GET)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:33 GMT+0400 (+04)'
v10.19.0
with TZ=GMT-4 : -120 'Mon Mar 30 2020 14:32:34 GMT+0200 (Central European Summer Time)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:34 GMT+0000 (Coordinated Universal Time)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:34 GMT+0000 (GMT)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:34 GMT+0400 (Samara Standard Time)'
v11.15.0
with TZ=GMT-4 : -120 'Mon Mar 30 2020 14:32:35 GMT+0200 (Central European Summer Time)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:35 GMT+0000 (Coordinated Universal Time)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:35 GMT+0000 (GMT)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:35 GMT+0400 (Samara Standard Time)'
v12.16.1
with TZ=GMT-4 : -120 Mon Mar 30 2020 14:32:35 GMT+0200 (Central European Summer Time)
with TZ=UTC : 0 Mon Mar 30 2020 12:32:35 GMT+0000 (Coordinated Universal Time)
with TZ=GET : 0 Mon Mar 30 2020 12:32:35 GMT+0000 (GMT)
with TZ=Europe/Samara: -240 Mon Mar 30 2020 16:32:35 GMT+0400 (Samara Standard Time)
v13.12.0
with TZ=GMT-4 : -120 Mon Mar 30 2020 14:32:36 GMT+0200 (Central European Summer Time)
with TZ=UTC : 0 Mon Mar 30 2020 12:32:36 GMT+0000 (Coordinated Universal Time)
with TZ=GET : 0 Mon Mar 30 2020 12:32:36 GMT+0000 (GMT)
with TZ=Europe/Samara: -240 Mon Mar 30 2020 16:32:36 GMT+0400 (Samara Standard Time)有关详细信息,请参阅票证:https://github.com/nodejs/node/issues/32564
https://stackoverflow.com/questions/60926255
复制相似问题