假设我有一个在纽约运行的node.js服务器,并且我有一个使用Web浏览器从加利福尼亚连接到它的客户端。如果在精确相同的时刻调用Date.now(),我能否合理地期望客户端和服务器上的Date.now()匹配到50-100毫秒左右?理论上,由于Date.now()“返回自1970年1月1日00:00:00 UTC以来经过的毫秒数”,因此在不同机器和时区上,Date.now()应始终保持一致,对吗?
不,你不能假设客户端和服务器时间是同步的。
其中一个原因是Date.now()
基于用户操作系统的系统时间。你无法控制它,时间可能是正确的,可能略微偏差甚至完全错误。
你可以自己尝试一下:
> Date.now()
1466809144962
> Date.now()
1403650777388
Date.now()
两次,一次设置了正确的时间在Windows上。然后我改变了我的系统时钟年份为2014并再次运行了 Date.now()
。
永远不要依赖用户控制下的信息的正确性,除非进行服务器端验证。
Date.now()
在两者上产生类似的结果?Date.now()
是否与时区无关,或更改时区是否会影响 Date.now()
返回的值。 - Llama D'AttoreDate.now
是时区无关的,它返回自 Unix 纪元以来经过的毫秒数。 - Etienne Martin