Javascript 如何在php中即使页面刷新也不重置多重计时器?

Javascript 如何在php中即使页面刷新也不重置多重计时器?,javascript,php,jquery,timer,Javascript,Php,Jquery,Timer,我已经检查了来自的答案,因此如何才能将其用于多个数据。例如,为了让我设置特定服务的计时器。这是我的剧本 <script type="text/javascript"> //var minutes2 = currentTime.setMinutes(currentTime.getMinutes() + 30); function addMinutes(date, minutes) {

我已经检查了来自的答案,因此如何才能将其用于多个数据。例如,为了让我设置特定服务的计时器。这是我的剧本

            <script type="text/javascript">
            //var minutes2 = currentTime.setMinutes(currentTime.getMinutes() + 30);
            function addMinutes(date, minutes) {
                return new Date(date.getTime() + minutes*60000);
            }
            var dat = new Date();
            //var tim = addMinutes(dat, 15);
            //console.log(tim); 

            function fixIntegers(integer)
            {
                if (integer < 0)
                    integer = 0;
                if (integer < 10)
                    return "0" + integer;
                return "" + integer;
            }

            $(function () { 
                $('.btn-start-timer').click(function(){
                    var i = window.setInterval(function(){

                        var future = addMinutes(dat, 60);
                        //var future = new Date("Dec 12 2013 22:10:00 GMT-0800 (Pacific Standard Time) ");
                        var now = new Date();
                        //console.log(tim);
                        var difference = Math.floor((future.getTime() - now.getTime()) / 1000);

                        var seconds = fixIntegers(difference % 60);
                        difference = Math.floor(difference / 60);

                        var minutes = fixIntegers(difference % 60);
                        difference = Math.floor(difference / 60);

                        var hours = fixIntegers(difference % 24);
                        difference = Math.floor(difference / 24);

                        var days = difference;
                    /*  $(this).parent().parent().find('.timer #seconds').text(seconds + "s");
                        $(this).parent().parent().find('.timer #minutes').text(minutes + "m");
                        $(this).parent().parent().find('.timer #hours').text(hours + "h");
                        $(this).parent().parent().find('.timer #days').text(days + "d");*/

                        $(".timer #seconds").text(seconds + "s");
                        $(".timer #minutes").text(minutes + "m");
                        $(".timer #hours").text(hours + "h");
                        $(".timer #days").text(days + "d");
                        if(hours == 0 && minutes == 0 && seconds == 0){
                             window.clearInterval( i );   
                            alert('times up');
                        }
                    }, 1000);

                });
            });

        </script>

//var minutes2=currentTime.setMinutes(currentTime.getMinutes()+30);
功能添加分钟数(日期,分钟){
返回新日期(Date.getTime()+分钟*60000);
}
var dat=新日期();
//var tim=增加分钟数(dat,15);
//控制台日志(tim);
函数整数(整数)
{
if(整数<0)
整数=0;
if(整数<10)
返回“0”+整数;
返回“+”整数;
}
$(函数(){
$('.btn启动计时器')。单击(函数(){
var i=window.setInterval(函数(){
var future=增加分钟数(数据,60);
//var future=新日期(“2013年12月12日22:10:00 GMT-0800(太平洋标准时间)”;
var now=新日期();
//控制台日志(tim);
var difference=Math.floor((future.getTime()-now.getTime())/1000);
var秒=固定整数(差%60);
差值=数学下限(差值/60);
var分钟数=固定整数(差值%60);
差值=数学下限(差值/60);
var小时数=固定整数(差异%24);
差异=数学楼层(差异/24);
var天数=差异;
/*$(this.parent().parent().find('.timer#seconds').text(seconds+“s”);
$(this.parent().parent().find('.timer#minutes').text(minutes+“m”);
$(this.parent().parent().find('.timer#hours').text(hours+“h”);
$(this.parent().parent().find('.timer#days').text(days+“d”)*/
$(“.timer#seconds”).text(秒+秒);
$(“.timer#minutes”).text(分钟+“m”);
$(“.timer#hours”).text(小时+“h”);
$(“.timer#days”).text(days+“d”);
如果(小时=0和分钟=0和秒=0){
窗口。清除间隔(i);
警报(“超时”);
}
}, 1000);
});
});
以下是我对html的看法:

        <table cellpadding="10">
            <tr>
                <th>Timer</th>
                <th>&nbsp;</th>
            </tr>
            <tr>
                <td class="timer">
                    <span id="days"></span>
                    <span id="hours"></span>
                    <span id="minutes"></span>
                    <span id="seconds"></span>
                </td>
                <td><button type="button" class="btn-start-timer">Start Now</button></td>
            </tr>
            <tr>
                <td class="timer">
                    <span id="days"></span>
                    <span id="hours"></span>
                    <span id="minutes"></span>
                    <span id="seconds"></span>
                </td>
                <td><button type="button" class="btn-start-timer">Start Now</button></td>
            </tr>
        </table>

计时器
从现在开始
从现在开始
如何确定启动后不重置的时间?

使用事件:

在卸载之前

检测用户何时离开页面。然后,发送一个ajax请求。要处理您的请求,只需将任何信息保存在post.php中的$\u会话变量中

// posted.php
session_start();
if ( isset ( $_POST['hours'] && isset ( $_POST['minutes'] && isset ( $_POST['seconds'] && )
{
    $_SESSION['hours'] = $_POST['hours'];
    $_SESSION['minutes'] = $_POST['minutes'];
    $_SESSION['seconds'] = $_POST['seconds'];
}
然后,当加载/刷新新页面时,javascript中应该包含初始化的变量

var hours = <?php if ( isset($_SESSION['hours']) ) echo $_SESSION['hours'] else 0; ?>;
var minutes = <?php if ( isset($_SESSION['minutes']) ) echo $_SESSION['minutes'] else 0; ?>;
var seconds = <?php if ( isset($_SESSION['seconds ']) ) echo $_SESSION['seconds '] else 0; ?>;
使用


每个计时器都有自己的计时器

在$\u会话或$\u COOKIE['time']或本地存储中保存小时、分钟、秒
然后从中检索值

那么
post.php
在做什么?你到底有什么问题?@MichaelVilleneuve我怎样才能在启动后留出时间不重置?如果时间到了,它会更新服务的状态。我没有使用任何框架,它只是原始的PHP,让你知道我在做什么是我之前的问题“因为这次我没有使用
countdown.js
。谢谢,我会试试这个。除非调用
ignore\u user\u abort(true),否则在页面退出之前可能没有足够的时间完成这个ajax请求位于PHP的顶部script@MichaelVilleneuve由于它是多个,如果用户再次单击另一个
开始按钮
我认为会话的值将被新值替换?不知道为什么有人投了反对票-不认为这很糟糕?!!不管怎样,我不明白你说的“既然它是多重的”是什么意思?如果他单击该按钮,您只需发送一个新的Ajax请求,其所有值均为0。例如,$\u会话['hours']的值是否不会被替换?是否单击多个按钮?我会投票表决的
$_SESSION['hours']
$_SESSION['idOfTimer']['hours']