如何在javascript中使用服务器端倒计时?

如何在javascript中使用服务器端倒计时?,javascript,php,time,timer,Javascript,Php,Time,Timer,我目前正在一个webview上构建这个计时器,在这个webview中,计时器将自动使用javascript更新,并且计时器将每秒递减 当前的问题是,当用户让手机进入睡眠状态时,计时器不会相应地更新,倒计时也会有点中断,因此我希望通过服务器端更新计时器,而不是依赖于一个功能,如果用户让手机进入睡眠状态,计时器就会中断。这是我的当前代码 <h2 id="timer"> 1:00 <h2> <script> var countdown = new D

我目前正在一个webview上构建这个计时器,在这个webview中,计时器将自动使用javascript更新,并且计时器将每秒递减

当前的问题是,当用户让手机进入睡眠状态时,计时器不会相应地更新,倒计时也会有点中断,因此我希望通过服务器端更新计时器,而不是依赖于一个功能,如果用户让手机进入睡眠状态,计时器就会中断。这是我的当前代码

<h2 id="timer"> 
   1:00
<h2>

<script>
   var countdown = new Date("<?php echo $row['end_timer'] ?>").getTime();
   var now = new Date("<?php echo date('Y-m-d H:i:s') ?>")

     var x = setInterval(function() {

         // Increase the distance by 1
         now.setSeconds(now.getSeconds() +                                           

         var distance = countdown - (now.getTime());

         var seconds = Math.floor((distance % (1000 * 60)) / 1000);

          document.getElementById("timer").innerHTML = (seconds < 10 ? '0' : '') + seconds;

          if (distance < 0) {
             clearInterval(x);
             document.getElementById("timer").innerHTML = "00";
             location.reload();
           }
     }, 1000);
</script>

1:00
var countdown=新日期(“”.getTime();
var now=新日期(“”)
var x=setInterval(函数(){
//将距离增加1
now.setSeconds(now.getSeconds()+
var distance=countdown-(now.getTime());
var秒=数学楼层((距离%(1000*60))/1000);
document.getElementById(“计时器”).innerHTML=(秒<10?'0':'')+(秒);
如果(距离<0){
净间隔(x);
document.getElementById(“计时器”).innerHTML=“00”;
location.reload();
}
}, 1000);

我可以想出三种方法与服务器同步倒计时

  • 每秒钟或当手机唤醒时发送一次
  • 使用
  • 使用
  • 但是有一个更简单的方法,你可以重写你的JS。 您正在将1秒添加到
    now
    变量中。但这不起作用,因为如果手机处于睡眠状态,
    setInterval
    不会在指定的时间间隔内(在您的情况下为1000毫秒)调用其回调。因此,您将1秒添加到
    now
    中,尽管时间已超过1秒。
    var countdown=new Date(Date.now()+30*1000)//从现在开始,30秒后将结束倒计时
    var cdElem=document.getElementById(“coutdown”);
    函数displayCountdown(){
    //倒数计时结束前的时间(毫秒)
    var deltaTime=countdown.getTime()-Date.now();
    if(deltaTime<0){
    clearInterval(有效期间)
    deltaTime=0;
    }
    cdElem.innerText=Math.round(deltaTime/1000);
    }
    var intervalId=设置间隔(显示倒计时,1000);
    displayCountdown()

    您可以这样做,但不应该使用PHP。PHP设计为在短时间(毫秒)内运行一次。可以让PHP运行几分钟,但它有很多问题。Node.js更适合此类任务。或者,您可以重写js代码,使其在手机进入睡眠状态时仍能工作。在手机唤醒后,使用单个ajax调用重新与服务器同步?如何与ajax调用重新同步?谢谢回答!我现在的问题是如何将其设置为某个时区。由于服务器端是UTC,我需要将javascript更改为UTC时间,对吗?如果您这样构造日期,可以指定时区偏移量:
    new date('1975年8月19日23:15:30 GMT-02:00');
    或者您可以使用方法
    .getTimezoneOffset()
    并做一些计算如果有轻微偏移,您如何将javascript时间与服务器时间同步?您可以使用PHP中的
    舍入(microtime(true)*1000)
    和JS中的
    Date.now()。