我试图从数据库创建倒数计时器。我已将deltaTimeServer发送给JS。输出是正确的,但它们冻结了(不倒数,我必须按F5键)。对我有什么想法吗?

这是我的代码。

JS

<script type="text/javascript">
 function countDown(){
     $(".show").each(function() {
          var elm = $(this);
          var difTime=this.timestamp;
          var day=0,hours=0,minutes=0,seconds=0;
          if(difTime>0){
              day=Math.floor(difTime/84600);
              hours=(Math.floor((difTime/3600))%24) + day*24 ;
              minutes=Math.floor(difTime/60)%60;
              seconds=Math.floor(difTime)%60;
          }
          else{
              elm.removeClass("show"); //for remove class show
          }
          elm.html(hours+' H '+minutes+' M '+seconds+' S ');
      });
 }
 function countDown_onLoad(){
      $(".show").each(function() {
          this.timestamp = parseInt(this.firstChild.nodeValue,10);
      });
      setInterval(countDown,1000);
  }
  $(document).ready(function() {
      countDown_onLoad();
  });
</script>


的PHP

$show=mysql_query("SELECT * FROM `room_lists` WHERE `active` = 1");
while ($array = mysql_fetch_array($show))
{
   $timeStop = $array['timeStop'];
   $deltaTimeServer = strtotime($timeStop)-strtotime(date('Y-m-d H:i:s'));
   echo "<td align = 'center'><div class=\"show\">".$deltaTimeServer."</div></td>";
}

最佳答案

JS中的问题是您的difTime始终相同。您必须从原始this.timestamp中减去当前时间戳。

但是,这更容易,因为您每秒都在倒数。您可以减少时间戳记:

var difTime=this.timestamp--;


那应该做到的。

另外,您可以更改以下内容:

$deltaTimeServer = strtotime($timeStop)-strtotime(date('Y-m-d H:i:s'));


对此:

$deltaTimeServer = strtotime($timeStop)-time();


最后,在PHP中输出td时,我会用style="display:none"隐藏它。设置了时间戳后,您可以清除td并显示它-这样,人们就不会看到变成计数器的时间戳。

关于php - MySQL的倒数计时器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11896843/

10-12 00:59