我需要为私人服务器中的所有客户端提供统一的javascript时间。所以我想在初始化时将客户端的javascript时间设置为服务器的时间。
现在我正在考虑设置一个setInterval来增加一个带有时间戳的变量,但我认为每隔n毫秒就有一个setInterval在后面运行会太多了。
那么有没有办法让我设置javascript的开始时间?所以new Date
的每个实例都将基于此而不是客户端的系统时间?
与服务器时间相差1-2秒即可,但如果可以达到毫秒的差异,那就更好了。
有什么建议吗?
答案 0 :(得分:2)
让服务器输出它的当前时间戳,然后计算客户端时间戳和服务器时间戳之间的差异。
<script>
var serverEpoch = 1408602887; // written dynamically by the server
var epochDiff = Math.round(Date.now()/1000)-serverEpoch;
</script>
现在,您可以使用epochDiff中存储的服务器时间和客户端时间(以秒为单位)之间的差异,您可以将其用于时间计算。
正如我在评论中提到的,这仅适用于您的网页生成速度相当快的情况。如果时间可以波动(例如在5-2000ms之间),那么使用XMLHttpRequest()
从专用的快速脚本动态获取服务器时间会更好。