Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用服务器时间的JavaScript倒计时_Javascript_Timer_Countdown - Fatal编程技术网

使用服务器时间的JavaScript倒计时

使用服务器时间的JavaScript倒计时,javascript,timer,countdown,Javascript,Timer,Countdown,我正在尝试创建一个基于服务器上的时间的倒计时计时器 我最初让服务器设置剩余时间,只是做了一个setTimeout1秒,这将减少时间 我发现这有两个问题: 从服务器设置到呈现客户端页面和JavaScript开始运行的时间都有延迟。滞后量取决于用户互联网连接和计算机/JavaScript引擎的速度 我认为,在速度较慢的计算机上,1秒的设置超时时间可能有点落后 我更改了它,这样服务器将设置结束时间,客户端上的JavaScript将使用时间(UTC)并计算剩余时间。然后,它会在每次setTimeout回

我正在尝试创建一个基于服务器上的时间的倒计时计时器

我最初让服务器设置剩余时间,只是做了一个
setTimeout
1秒,这将减少时间

我发现这有两个问题:

  • 从服务器设置到呈现客户端页面和JavaScript开始运行的时间都有延迟。滞后量取决于用户互联网连接和计算机/JavaScript引擎的速度
  • 我认为,在速度较慢的计算机上,1秒的设置超时时间可能有点落后
  • 我更改了它,这样服务器将设置结束时间,客户端上的JavaScript将使用时间(UTC)并计算剩余时间。然后,它会在每次
    setTimeout
    回调时执行此操作。这使时间和倒计时变得完美。如果客户端有一个快速的计算机/JavaScript引擎,计时器将保持在页面上。如果计算机/JavaScript引擎速度较慢,您可能会看到在这里或那里跳过一秒钟,但时间永远不会停止

    到目前为止,我发现此方法存在1个问题:

  • 每个客户的时钟都可能不同
  • 因此,剩下的时间可能是几秒,或者30秒,如果客户端的计算机上的时间不正确,甚至几天


    有没有办法根据服务器的结束日期精确计算剩余时间?

    我不知道您需要什么样的解决方案,但考虑到网络和页面呈现延迟,不可能让客户机-服务器协议比一秒钟好得多。我建议您每5秒或10秒进行一次ajax轮询,并相应地调整计时器。还有一种基本上是“反向”的ajax,它可以将时间推送到客户端。但无论哪种方式,您仍然需要应对网络和渲染延迟