PHP 倒计时不返回过期消息,而是向前倒数过去的设定时间

PHP countdown is not returning expired message but instead counting forward past set time

我遇到了一些问题,php 直到收到过期消息才开始倒计时。我正在尝试创建一个促销脚本,它将 运行 基于数据集,它可能是一天的促销活动,比如周六特价或几天的促销活动。我面临的另一个问题是缺乏 javascript/jquery 知识来使用 ajax 进行基本倒计时,而不是仅在刷新时更新的静态 php 回显。

这里是负责回显剩余交易时间和过期消息的代码。这是包含在索引页面中的文件,用于使用 php.

构建交易栏 html
$now  = new DateTime();
$ends = new DateTime('Mar 22, 2015, 11:00 am'); 
$left = $now->diff($ends);

if($now != $ends) {
    $promo_d = $left->format('%a'); #days 
    $promo_h = $left->format('%h'); #hours
    $promo_m = $left->format('%i'); #min
    $promo_s = $left->format('%s'); #sec

    $deal = "Expires in: ".$promo_h." hours ".$promo_m." min ".$promo_s." sec";
} else {
    $deal = "Expired!";
}

$html = <<<DEALBAR
     <div class="row-fluid">
        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
        <br>
                <div class="offer offer-success">
                        <div class="shape">
                                <div class="shape-text">
                                     <i class="fa fa-scissors fa-2x"></i>
                                </div>
                        </div>
                        <div class="offer-content">
                                <h2 class="lead">
                                     <strong>Saturday Special !!!</strong> <span class="pull-right"><i class="fa fa-clock-o"></i> ($deal)</span>
                                </h2>
                                <hr>
                                <p style="font-size:16px">
                                     This is a one day Saturday Special active till March 22, 2015 9:00AM. Simply quote <span class="label label-success">SAT 40</span> during your service call to resive  dollars off your work order.  
                                </p>
                        </div>
                </div>
        <br>
     </div>
     </div>
DEALBAR;

echo $html;

这里是 jquery 我用于旧的倒数计时器,但遗憾的是我不知道如何让它与上面的代码很好地配合使用:(

function startTimer(duration, display) {
    var timer = duration, minutes, seconds;
    setInterval(function () {
        minutes = parseInt(timer / 60, 10)
        seconds = parseInt(timer % 60, 10);

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        display.text(minutes + ":" + seconds);

        if (--timer < 0) {
            timer = duration;
        }
    }, 1000);
}

jQuery(function ($) {
    var fiveMinutes = 60 * 28,
        display = $('.deal-countdown');
    startTimer(fiveMinutes, display);
});

有人可以解释为什么我的脚本没有回显 "Expired!" 而是继续运行吗?我怎样才能使 jquery 与上述脚本一起工作?而不是在页面刷新时更新数据?

提前致谢

if($now != $ends) {

只会在它们匹配时的那一秒起作用,一秒后它会再次出错。你需要

if($now <= $ends) {

仅当 now 不超过 ends

时,它才会创建您的时间字符串