3

我想在我的 PHP 页面上有一个与特定按钮关联的倒计时,我正在使用以下基于 javascript 的代码但是,它会在页面重新加载时重置目标值,所以如何在不重置目标值的情况下获得相同的值。我可以用会话做点什么?

    <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>
4

2 回答 2

1

而不是像这样评估您的变量“现在”:

var now = new Date();

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

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

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

如果我们想支持旧版浏览器(咳嗽IE),我们可以使用 userData 或简单地使用 cookie 做一些非常相似的事情。

于 2013-03-12T01:13:48.250 回答
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) )
于 2013-03-11T23:31:19.610 回答