倒计时器PHP错误

时间:2013-01-06 21:34:36

标签: php mysql database timer countdown

我正在尝试制作一个倒计时器,显示产品到期前的天数,当有0天时,我想显示一条消息,说明它已过期:

<?php
$target =  mktime(0, 0, 0, 1, 7, 2013) ;
$today = time () ;
$difference =($target-$today) ;
$days =(int) ($difference/86400) ;
if ($today == $target)
{
print "this product has expired";
}
else
{
print "This product expires in $days days";
}
?>

当您访问该页面时,它始终显示第二条消息,即使今天与目标日期的日期相同。

如果可能的话,你能告诉我如何在不重新加载页面的情况下显示分钟和秒钟吗?我还想在剩下0天/分钟时更新MySQL数据库,这可能吗?不需要启动/停止按钮。

2 个答案:

答案 0 :(得分:1)

这里有两个问题。第一个是$ today和$ target都是以秒为单位测量的。

这意味着除非您以与目标完全相同的秒数访问该页面,否则您将看不到该消息。

这也意味着在过期后的任何时间也会起作用,这可能不是你想要的。尝试使用:

if($today > $target)

要显示分钟和秒数,您应该查看可以倒计时的javascript。

答案 1 :(得分:1)

我认为你已经有了解决方案。但如果有人仍在寻找这种解决方案,那么这可能有所帮助。在这个解决方案中,我们可以分为几天,几小时,几分钟,几秒钟。

Reverse timer from javascript:

var target_date = new Date('Aug 01 2014 20:47:00').getTime();
    var days, hours, minutes, seconds;
    var countdown = document.getElementById('timeremaining');
    var countdownTimer = setInterval(function () {
        var current_date = new Date().getTime();
        var seconds_left = (target_date - current_date) / 1000;

        days = parseInt(seconds_left / 86400);
        seconds_left = seconds_left % 86400;

        hours = parseInt(seconds_left / 3600);
        seconds_left = seconds_left % 3600;
        minutes = parseInt(seconds_left / 60);
        seconds = parseInt(seconds_left % 60);

        if(days <= 0 && hours <= 0 && minutes <= 0 && seconds <= 0 )
        {
           document.getElementById('timeremaining').innerHTML = '';
           clearInterval(countdownTimer);              
        }
        else
        {       
            if(days>0)
              {
                 days= days+'d,';
              } 
              else
              {
                 days='';
              }            
            countdown.innerHTML ='( ' + days + checkTime(hours) + ':'+ checkTime(minutes) + ':' + checkTime(seconds) +' remaining)';    
        }
    }, 1000);

    function checkTime(i) {
        if (i < 10) {i = '0' + i};  
        return i;
    }