2

我有这样的代码顺序:

  var d0 = new Date();
  ... 
  ...
  var d1 = new Date();

  if (d0>d1) {
    console.log("Problem");
  }

先看一下,d1 没有办法比 d0 大。但我刚刚在 2 天前在生产服务器上体验过。d1 比 d0 早几毫秒。怎么会这样?

Date() 是从哪里来的?是V8的吗?还是从操作系统系统?

4

2 回答 2

4

如果不仔细查看您的系统就很难说,但总的来说,使用日期和时间库进行编程有时会非常非常奇怪。

推荐阅读:程序员相信时间的谎言

我最近在生产机器上的 v8 中遇到了类似的问题,并且(我们认为)正在发生的事情是网络时间守护程序正在改变系统的时钟——正如它的设计目的一样。所以,我们偶尔会有一些分析说我们的“结束时间”我们的“开始时间”早,因为系统时钟在代码执行过程中被 NTP 重新同步。

于 2012-10-11T00:47:22.220 回答
3

许多服务器使用某种方法将它们的系统时间同步到某个更高的权限(使用 NTP 或其他协议)。这种同步是定期进行的,如果需要使系统时钟恢复同步,可能会导致时间向后移动。这是与您自己的代码异步完成的,因此它可能发生在这两个new Date()调用之间。

的价值new Date()最终来自 V8 调用以获取时间的操作系统。

于 2012-10-11T00:42:39.960 回答