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



我有这样的代码:

  var d0 = new Date();
  ... 
  ...
  var d1 = new Date();
  if (d0>d1) {
    console.log("Problem");
  }

先看,D1不可能比D0老。 但我两天前刚刚在生产服务器中经历过。 d1 比 d0 早几毫秒。 怎么可能?

Date() 来自什么?是来自 V8 还是来自操作系统?

如果不仔细研究你的系统,很难说,但总的来说,使用日期和时间库进行编程偶尔会非常非常奇怪。

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

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

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

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

最新更新