使用PHP进行Javascript倒计时

时间:2013-03-11 14:51:40

标签: javascript

我希望在我的PHP页面上有一个特定按钮的倒计时,我正在使用基于javascript的以下代码 但是,它会重置页面重新加载时的目标值,所以如何在没有重置目标值的情况下使用相同的值。我可以用session做什么吗?

    <html>
    <body>
<p>Time remaining: <span id="countdownTimer"><span>00:00.<small>00</small></span></p>
<script type="text/javascript">
if (document.getElementById('countdownTimer')) {
    pad = function(n, len) { // leading 0's
        var s = n.toString();
        return (new Array( (len - s.length + 1) ).join('0')) + s;
    };

    function countDown() {
        var now = new Date();
        if ( (now.getDay() >= 0) && (now.getDay() <= 6) ) { // Monday to Friday only
            var target = 23; // 15:00hrs is the cut-off point
            if (now.getHours() < target) { // don't do anything if we're past the cut-off point
                var hrs = (target - 1) - now.getHours();
                if (hrs < 0) hrs = 0;
                var mins = 59 - now.getMinutes();
                if (mins < 0) mins = 0;
                var secs = 59 - now.getSeconds();
                if (secs < 0) secs = 0;
                var str = pad(hrs, 2) + ':' + pad(mins, 2) + '.<small>' + pad(secs, 2) + '</small>';
                document.getElementById('countdownTimer').innerHTML = str;
            }
        }
    }
    var timerRunning = setInterval('countDown()', 1000);
}
</script>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

而不是像现在这样评估你的变量:

var now = new Date();

像这样评估它(假设我们的浏览器支持LocalStorage):

if (!localStorage.myDate)
    localStorage.myDate = (new Date()).toString();
var now = new Date(localStorage.myDate);

这样,我们只评估首次加载时的当前日期。之后,我们引用该日期的序列化字符串版本,并在创建“now”变量时将其作为参数传递。

如果我们想支持旧浏览器( cough IE),我们可以使用userData或只是做一些非常类似于cookies的事情。

答案 1 :(得分:0)

基本上,你想要捕获'现在'一次,而不是没有那个改变,对吗?

function getNow(){ //call this rather than use var now = new Date();
  if (window.localStorage){
      if (!localStorage.now){
        localStorage.now = new Date();
      }
      return localStorage.now;
  }else{
    return new Date();
  }
}

请原谅我是否有一些语法(我不确定你是否必须转换日期以将其存储在localStorage中),但这就是它的要点。对于IE7及以下支持,您需要使用cookie,但概念保持不变。

另外,我认为你错了:

 if ( (now.getDay() >= 0) && (now.getDay() <= 6) )

总是如此,请尝试:

if ( (now.getDay() > 0) && (now.getDay() < 6) )