新的Date()如何返回比之前调用的新Date()(在Node.js中)更旧的时间?

时间:2012-10-11 00:25:49

标签: node.js date

我按顺序编写代码:

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

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

首先看一下,d1比d0更老。但我刚刚在生产服务器中体验过2天前。 d1比d0早几毫秒。怎么会这样?

什么是Date()来自哪里?它来自V8吗?还是来自OS系统?

2 个答案:

答案 0 :(得分:4)

如果不仔细研究一下你的系统就很难说,但总的来说记住日期和时间库的编程偶尔会非常奇怪。

推荐阅读:Falsehoods Programmers believe about time

我最近在生产箱上的v8中遇到了类似的问题,而我们认为正在发生的是网络时间守护程序正在改变系统的时钟 - 就像它的设计那样。因此,我们偶尔会进行一些分析,说我们的“结束时间”来自之前我们的“开始时间”,因为系统时钟在代码执行过程中被NTP重新同步。

答案 1 :(得分:3)

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

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