Javascript Date.now() 跨机器/时区的一致性

Vic*_*hou 5 javascript browser node.js

假设我有一个在纽约运行的 Node.js 服务器,并且有一个客户端使用 Web 浏览器从加利福尼亚连接到它。我如何合理地期望从客户端调用的 Date.now() 与从服务器上的 node.js 调用的 Date.now() 相匹配,在大约 50-100 毫秒内(假设它们在完全相同的时刻被调用)?理论上,Date.now() 在机器和时区之间应该始终保持一致,因为 Date.now() “返回自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的毫秒数”,对吧?

Tim*_*imo 5

不,您不一定假设客户端和服务器时间是同步的。

原因之一是Date.now()基于用户操作系统的系统时间。你无法控制这一点,时间可能是正确的,也可能有一点偏差,甚至完全错误。

你可以自己尝试一下:

> Date.now()
1466809144962

> Date.now()
1403650777388
Run Code Online (Sandbox Code Playgroud)

我跑了Date.now()两次,一次是在 Windows 中设置了正确的时间。然后我将系统时钟的年份更改为2014年并Date.now()再次运行。

切勿依赖未经服务器端验证的用户控制下的信息的正确性。