php倒计时服务器端

时间:2012-01-19 00:57:11

标签: php javascript cron

我有一个关于javascript / php cron问题的问题。它本身不是问题,但在我的情况下它是。 我有以下javascript设置cookie并倒计时到该cookie的结束时间。在我的情况下它10分钟。 我还有一个每10分钟运行一次的cron文件。 我想将倒计时与cron文件同步。

当我从页面调用它时,下面的脚本运行良好,但它从用户访问页面开始倒计时,并且与运行的cron文件不同步。

我知道这不是一个php问题,但显示脚本的页面是php。

对我来说有什么指示? 非常感谢帮助。 谢谢你的阅读。

我所有的都在下面。

<div id="countre4">
  <script type="text/javascript">
 function setCookie(c_name, value)
    {
        var exdate = new Date();
        exdate.setDate(exdate.getDate() + 14);

        var c_value = escape(value) + "; expires=" + exdate.toUTCString();
        document.cookie = c_name + "=" + c_value;
    }

    function mycountre(countdownId, countdownTarget, countdownSeconds, countdownLooping){
        var countre = document.getElementById(countdownId); // get html element
        if (!countre) {
            return;
        }

        var target = countdownTarget; // target time
        var intervalId; // id of the interval

        setCookie("time", target);

        // update function
        function updatecountre(){
            var time = Math.floor((target - new Date().getTime()) / 1000); // countdown time in seconds
            if (time < 0) { // if countdown ends
                if (countdownLooping) { // if it should loop
                    target += 1000 * countdownSeconds; // set new target time
                    time = Math.floor((target - new Date().getTime()) / 1000); // recalculate current time

                    setCookie("time", target);
                } else { // otherwise
                    clearInterval(intervalId); // clear interval
                    time = 0; // set time to 0 to avoid displaying negative values
                }
            }

            // split time to seconds, minutes and hours
            var seconds = '0' + (time % 60);
            time = (time - seconds) / 60;
            var minutes = '0' + (time % 60);
            time = (time - minutes) / 60;
            var hours = '0' + time;

            // make string from splited values
            var str = hours.substring(hours.length - 2) + ':' + minutes.substring(minutes.length - 2) + ':' + seconds.substring(seconds.length - 2);
            countre.innerHTML = str;
        }

        intervalId = setInterval(updatecountre, 200); // start interval to execute update function periodically
    };

    var parts = document.cookie.split(';');
    var cookie = new Date().getTime() + 1000 * 15 * 60;

    for (var i = 0; i < parts.length; ++i) {
        if (parts[i].trim().indexOf('time') == 0) {
            var value = parts[i].trim().split('=');
            cookie = parseInt(value[1]);
        }
    }

    mycountre(
        'countre4', // id of the html element
        cookie,
        10 * 60, // time in seconds (10min here)
        true // loop after countdown ends?
    );


</script>
</div>

1 个答案:

答案 0 :(得分:2)

也许你应该重新考虑你的方法。不要将cookie用于实际存储在服务器上的信息。

如果不是cookie,每个PHP页面只是设置一个全局JS变量来表示你剩下多少时间。有点像这样:

<script>
  var timeLeft = <? echo $timeLeftInMilliseconds ?>;
  startCounter(timeleft);
</script>

然后你的计数器脚本可以读取它并相应地为计数器设置动画。这使得服务器端代码能够在下一个cron发生时准确传递。