在 Node 10.15.13 上,new Date('01.01.2017')
结果为“2016-12-31T23:00:00.000Z”。
然而,在我构建的浏览器或docker镜像(同一 Node 版本)中,结果是“Sun Jan 01 2017 00:00:00 GMT+0100(中欧标准时间)”。。
是什么导致了这种差异以及如何解决它,例如单元测试?
最佳答案
您的差异很可能是由于您的本地计算机(或服务器)设置了时区,而您的 docker 容器没有设置时区。
这是我运行的第一个测试:
$ docker run -ti node:10 node -
> new Date('01.01.2017');
2017-01-01T00:00:00.000Z
然后我想知道服务器的时区是否可能对答案产生影响,事实上确实如此:
$ docker run -ti node:10 env TZ=Europe/Brussels node -
> new Date('01.01.2017');
2016-12-31T23:00:00.000Z
您可以将这与这两个“系统”日期结果关联起来:
- 未设置任何时区
$ docker run -ti node:10 date
Mon Mar 18 22:17:43 UTC 2019
- 设置时区
$ docker run -ti node:10 env TZ=Europe/Brussels date
Mon Mar 18 23:17:59 CET 2019
<小时/>
由于您指出了您尝试使用的确切版本,因此从我的 Angular 来看,我仍然有可重现的行为:
- 未设置时区
$ docker run -ti node:10.15.3 node -
> new Date('01.01.2017');
2017-01-01T00:00:00.000Z
- 设置时区
$ docker run -ti node:10.15.3 env TZ=Europe/Brussels node -
> new Date('01.01.2017');
2016-12-31T23:00:00.000Z
关于javascript - 为什么 ISO 日期转换在 javascript 环境中不一致以及如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55230501/