JavaScript的Date.now()在不同机器和时区下的一致性

5
假设我有一个在纽约运行的node.js服务器,并且我有一个使用Web浏览器从加利福尼亚连接到它的客户端。如果在精确相同的时刻调用Date.now(),我能否合理地期望客户端和服务器上的Date.now()匹配到50-100毫秒左右?理论上,由于Date.now()“返回自1970年1月1日00:00:00 UTC以来经过的毫秒数”,因此在不同机器和时区上,Date.now()应始终保持一致,对吗?

客户端日期和服务器日期的差距在50-100毫秒之内是否足够接近? - Zohaib Ijaz
1
客户机的时钟可以设置为任何时间。期望它们能够完全同步是不合理的。 - JJJ
1
永远不要相信客户所说的话。 - Alex Kudryashev
如果您将客户端日期时间传递给服务器进行增量计算,并可能将增量返回给客户端(根据需要重复此过程),那么您可能会得到一个很好的估计值。但是,正如其他人所警告的那样,这样做并不能保证客户端不会更改其日期时间并搞乱它,也不能保证增量/延迟随时间不会发生变化。 - JonSG
1
你绝对不能信任客户端的时间设置。它可能是任何值。如果你描述一下你真正想解决的问题,我们可以为处理不可信的客户端时间设置提供好的建议。 - jfriend00
显示剩余3条评论
1个回答

5

不,你不能假设客户端和服务器时间是同步的。

其中一个原因是Date.now()基于用户操作系统的系统时间。你无法控制它,时间可能是正确的,可能略微偏差甚至完全错误。

你可以自己尝试一下:

> Date.now()
1466809144962

> Date.now()
1403650777388

我运行了 Date.now() 两次,一次设置了正确的时间在Windows上。然后我改变了我的系统时钟年份为2014并再次运行了 Date.now()永远不要依赖用户控制下的信息的正确性,除非进行服务器端验证。

1
如果我有两个后端云实例,一个在东京,另一个在纽约,并且它们都同步到相同的时间服务器,但位于不同的时区。我能否假设 Date.now() 在两者上产生类似的结果?Date.now() 是否与时区无关,或更改时区是否会影响 Date.now() 返回的值。 - Llama D'Attore
1
@AlexanderD'Attore Date.now 是时区无关的,它返回自 Unix 纪元以来经过的毫秒数。 - Etienne Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接