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
时,它才会创建您的时间字符串
我遇到了一些问题,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