Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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
Php 如何创建计时器_Php_Javascript_Jquery_Html - Fatal编程技术网

Php 如何创建计时器

Php 如何创建计时器,php,javascript,jquery,html,Php,Javascript,Jquery,Html,我有一个$dbSessionDuration变量,通过使用mysqli,它可以将查询数据的结果绑定到这个变量中。$dbSessionDuration变量保存时间,因此该变量的时间格式如下: 01:30:10 这意味着1小时30分10秒。我想做的是在计时器中显示$dbSessionDuration值,这样在上面的示例中,它将从01:30:10开始滴答作响,并在停止时一直到0。我的问题是如何创建计时器,并将任何值$dbSessionDuration放入计时器以倒计时到00:00:00?首先,您必须以

我有一个
$dbSessionDuration
变量,通过使用mysqli,它可以将查询数据的结果绑定到这个变量中。
$dbSessionDuration
变量保存时间,因此该变量的时间格式如下:

01:30:10


这意味着1小时30分10秒。我想做的是在计时器中显示
$dbSessionDuration
值,这样在上面的示例中,它将从01:30:10开始滴答作响,并在停止时一直到0。我的问题是如何创建计时器,并将任何值
$dbSessionDuration
放入计时器以倒计时到00:00:00?

首先,您必须以秒为单位转换时间

<?php

list($hour,$min,$sec) = explode(':', $dbSessionDuration);
$dbSessionDurationTime = mktime(0,0,0,$hour,$min,$sec);

?>

要创建倒计时,必须使用Javascript

<script type="text/javascript">
    var millis = <?php echo $dbSessionDurationTime; ?>

    function displaytimer(){
        var hours = Math.floor(millis / 36e5),
            mins = Math.floor((millis % 36e5) / 6e4),
            secs = Math.floor((millis % 6e4) / 1000);
            //Here, the DOM that the timer will appear using jQuery
            $('.count').html(hours+':'+mins+':'+secs);  
    }

    setInterval(function(){
        millis -= 1000;
        displaytimer();
    }, 1000);

</script>

var millis=
函数displaytimer(){
var小时=数学地板(毫/36e5),
分钟=数学楼层((毫秒%36e5)/6e4),
秒=数学层((毫%6e4)/1000);
//这里是使用jQuery显示计时器的DOM
$('.count').html(小时+':'+min+':'+secs);
}
setInterval(函数(){
毫秒-=1000;
显示计时器();
}, 1000);
我没有测试,但那应该有用

代码:

我把时间分为小时、分钟和秒。每一秒时钟都在变小。Algo非常直截了当,我相信:

var timer = setInterval(function(){
        seconds--;
        if(seconds == -1) {
            seconds = 59;
            minutes--;

            if(minutes == -1) {
                minutes = 59;
                hours--;

                if(hours==-1) {
                  alert("timer finished");
                  clearInterval(timer);
                  return;
                }
            }
        }
        span.text(correctNum(hours) + ":" + correctNum(minutes) + ":" + correctNum(seconds));
    }, 1000);

在拥有jQuery时使用它

这是一个很好的插件

这是一个例子:

<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
        <script src="https://raw.github.com/jylauril/jquery-runner/master/build/jquery.runner-min.js"></script>      
    </head>
    <body>
        <span id="runner"></span>

        <script type="text/javascript">
            $(document).ready(function(){
                $('#runner').runner({
                    autostart: true,
                    countdown: true,
                    stopAt: 0,
                    startAt: 30000 // alternatively you could just write: 30*1000
                });
            });
        </script>
    </body>
</html>

$(文档).ready(函数(){
$('#runner')。runner({
自动启动:对,
倒计时:没错,
停留时间:0,,
startAt:30000//或者你可以写:30*1000
});
});

如果你需要一个定时器,你可以使用它,它工作得很好。您只需在阅读后将time或$dbSessionDuration放入HTML的一个隐藏元素中,并将其放入jquery计数器插件。如果这个想法听起来很有趣,请告诉我,我留下一个例子。

您应该首先知道,您创建的任何JavaScript计时器都是不准确的。这是由于无数的原因总结得很好

现在的好处是,您可以通过在每次迭代中简单地检查用户的系统时间来限制脚本的不精确性。是用户的系统时间

在您的情况下,这不是一个问题,因为您对经过的时间(01:30:10)感兴趣,但如果您在等待特定的时间点,则需要处理时区差异或用户计算机上设置不正确的时钟

您还必须了解的是,如果这是一个安全问题,那么在加载脚本后,您将无法考虑系统时钟的变化

示例:某些网站强制您在执行特定操作之前等待。但提前改变时钟,在大多数情况下会帮助您绕过安全性差的问题。在大多数情况下,不会这样做,因为辅助检查是在服务器端完成的。我想说的是,进行服务器端检查


为了回答您的问题,我会亲自计算通过考试所需的秒数:

$time = explode(':',$dbSessionDuration);# get hour, minutes, seconds to be elapsed
$time = $time[2] + $time[1] * 60 + $time[0] * 3600;# get elapse time in seconds
在JavaScript文件中,您可以执行以下操作:

(function(endTime){
    endTime*=1000; // javascript works with milliseconds
    endTime+=new Date().getTime();// add the current system time into the equation
    // your timeSync function
    (function timerSync() {
        var diff = new Date(endTime - new Date().getTime());
        var timer=document.getElementById('timer');
        if(diff<=0)return timerEnd(timer);
        timer.innerHTML = 
            doubleDigits(diff.getUTCHours())
            + ':' +
            doubleDigits(diff.getUTCMinutes())
            + ':' +
            doubleDigits(diff.getUTCSeconds())
        ;
        setTimeout(timerSync,1000);
    })();// also call it to start the timer
    // your timer end function
    function timerEnd(timer) {
        timer.innerHTML='Timer has stopped now';
    }
    // double digit formatting
    function doubleDigits(number) {
        return number<10
            ? '0'+number
            : number
        ;
    } 
})(
    <?php echo $time;?>
);// time to elapse 1:30:10
(函数(结束时间){
endTime*=1000;//javascript以毫秒为单位工作
endTime+=new Date().getTime();//将当前系统时间添加到等式中
//你的时间同步功能
(函数timerSync(){
var diff=new Date(endTime-new Date().getTime());
var timer=document.getElementById('timer');

如果(diff,您可以用更简单的方法来实现这一点。首先,您必须从数据库中检索已经以秒为单位的时间

<?php

    require_once 'db_connect.php';
    $sql = "SELECT * FROM ac_one_config"; 
    $result = $con->query($sql);

    if( $result->num_rows > 0 ){
        while($row=mysqli_fetch_assoc($result)) {
            $time_on = $row['ac_on_time'];
        }
    }
    header( "refresh:$time_on; url=https://localhost/your_project/file.php");

设置持续时间并将此值存储在会话变量中

   <div id="timer"></div>
 <?php

      $_SESSION['TIME_DURATION'] = 45;
      $_SESSION['start_time'] = date("Y-m-d H:i:s");
      $end_time = date("Y-m-d H:i:s", strtotime('+'.$_SESSION['TIME_DURATION'].'minutes',strtotime($_SESSION['start_time'])));
      if(!isset($_SESSION['end_time']) && empty($_SESSION['end_time'])){
         $_SESSION['end_time'] = $end_time;
       }
 ?>

  • 文件:response.php
    session_start();
    
    if(isset($_SESSION['TIME_DURATION']) && $_SESSION['TIME_DURATION'] != 0 ){
    
          $time_first = strtotime(date("Y-m-d H:i:s"));
    
         $time_second = strtotime($_SESSION['end_time']);
    
         $differenceinseconds = $time_second - $time_first;
    
         $time_lapse=gmdate("i:s",$differenceinseconds); 
         if($time_lapse=='00:00') { 
              echo "Time Out"; 
              unset($_SESSION['start_time']);
              unset($_SESSION['end_time']);
              unset($_SESSION['TIME_DURATION']);
         }else {
            echo gmdate("i:s",$differenceinseconds);
         }
    }else{
         echo "Time Out"; 
    }
    

  • 插入查询之前,您得到了什么
    var_dump('courseid)
    您是否已在下拉列表中选择了任何项目,然后提交给php?是否可以粘贴html表单?空字符串将转换为整数0。请尝试数据:
    $('#detailsForm')。serialize()+'&courses='+$('#coursesDrop')。val(),
    嘿,伙计,我没有忘记你,在我进入本节之前,我只是在编写一些php脚本。我会测试它并让你知道结果。谢谢你的回答
         var myVar = setInterval(myTimer, 1000);
    
         function myTimer() {
             var xmlhttp = new XMLHttpRequest();
    
             xmlhttp.open("GET","response.php",false);
    
             xmlhttp.send(null);
    
             if(xmlhttp.responseText == "Time Out"){
    
                 myStopFunction();
    
    
            }
            $('#timer').html(xmlhttp.responseText);
         }
    
    
         function myStopFunction() {
              clearInterval(myVar);
         }
    
    session_start();
    
    if(isset($_SESSION['TIME_DURATION']) && $_SESSION['TIME_DURATION'] != 0 ){
    
          $time_first = strtotime(date("Y-m-d H:i:s"));
    
         $time_second = strtotime($_SESSION['end_time']);
    
         $differenceinseconds = $time_second - $time_first;
    
         $time_lapse=gmdate("i:s",$differenceinseconds); 
         if($time_lapse=='00:00') { 
              echo "Time Out"; 
              unset($_SESSION['start_time']);
              unset($_SESSION['end_time']);
              unset($_SESSION['TIME_DURATION']);
         }else {
            echo gmdate("i:s",$differenceinseconds);
         }
    }else{
         echo "Time Out"; 
    }