我按顺序编写代码:
var d0 = new Date();
...
...
var d1 = new Date();
if (d0>d1) {
console.log("Problem");
}
首先看一下,d1比d0更老。但我刚刚在生产服务器中体验过2天前。 d1比d0早几毫秒。怎么会这样?
什么是Date()来自哪里?它来自V8吗?还是来自OS系统?
答案 0 :(得分:4)
如果不仔细研究一下你的系统就很难说,但总的来说记住日期和时间库的编程偶尔会非常奇怪。
推荐阅读:Falsehoods Programmers believe about time
我最近在生产箱上的v8中遇到了类似的问题,而我们认为正在发生的是网络时间守护程序正在改变系统的时钟 - 就像它的设计那样。因此,我们偶尔会进行一些分析,说我们的“结束时间”来自之前我们的“开始时间”,因为系统时钟在代码执行过程中被NTP重新同步。
答案 1 :(得分:3)
许多服务器使用某种方法将系统时间与某些更高权限同步(使用NTP或其他协议)。这种同步是定期进行的,如果需要使系统的时钟恢复同步,则会导致时间向后移动。这是与您自己的代码异步完成的,因此它可能发生在这两个new Date()
调用之间。
new Date()
的值最终来自V8调用的操作系统以获取时间。