我有这样的代码顺序:
var d0 = new Date();
...
...
var d1 = new Date();
if (d0>d1) {
console.log("Problem");
}
先看一下,d1 没有办法比 d0 大。但我刚刚在 2 天前在生产服务器上体验过。d1 比 d0 早几毫秒。怎么会这样?
Date() 是从哪里来的?是V8的吗?还是从操作系统系统?
如果不仔细查看您的系统就很难说,但总的来说,使用日期和时间库进行编程有时会非常非常奇怪。
推荐阅读:程序员相信时间的谎言
我最近在生产机器上的 v8 中遇到了类似的问题,并且(我们认为)正在发生的事情是网络时间守护程序正在改变系统的时钟——正如它的设计目的一样。所以,我们偶尔会有一些分析说我们的“结束时间”比我们的“开始时间”早,因为系统时钟在代码执行过程中被 NTP 重新同步。
许多服务器使用某种方法将它们的系统时间同步到某个更高的权限(使用 NTP 或其他协议)。这种同步是定期进行的,如果需要使系统时钟恢复同步,可能会导致时间向后移动。这是与您自己的代码异步完成的,因此它可能发生在这两个new Date()
调用之间。
的价值new Date()
最终来自 V8 调用以获取时间的操作系统。