javascript - 为什么 ISO 日期转换在 javascript 环境中不一致以及如何修复?

标签 javascript node.js docker

在 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/

相关文章:

node.js - 无法从公共(public) IP 访问 AWS Linux (Ubuntu) 托管应用程序

java - 如何为每个团队成员在unix中设置java开发环境

maven - 如何从Nexus3中获取组件和相关 Assets 的列表?

javascript - PHP 表单未提交但未显示任何错误

javascript - 使用 jquery-slim 包找不到 jQuery 模块?

javascript - Sequelize 添加多对多关系,附加数据不起作用

docker - 为什么 dockerised SSH 服务无法启动,因为它无法加载主机 key ?

javascript - 减去另外两个变量时更改一个 Mysql 变量的值

javascript - jQuery 看不到动态元素?

node.js - 从 npm : no such option --no-parallel 安装 ctags