需要修改日期倒计时的PHP代码(当计数达到0时不显示任何内容)
需要修改日期倒计时的PHP代码(当计数达到0时不显示任何内容) 我使用下面的代码来显示一个特定日期的文本视觉倒计时,分为月、周、日。效果很好。但是,当倒计时到达实际事件日期,然后超过事件日期时,它仍然显示绝对差异。我希望代码此时不显示任何内容(不向屏幕输出)。我希望能就如何修改这一点提供一些指导 要按说明执行的代码需要修改日期倒计时的PHP代码(当计数达到0时不显示任何内容),php,datetime,datediff,Php,Datetime,Datediff,需要修改日期倒计时的PHP代码(当计数达到0时不显示任何内容) 我使用下面的代码来显示一个特定日期的文本视觉倒计时,分为月、周、日。效果很好。但是,当倒计时到达实际事件日期,然后超过事件日期时,它仍然显示绝对差异。我希望代码此时不显示任何内容(不向屏幕输出)。我希望能就如何修改这一点提供一些指导 要按说明执行的代码 $d1 = new DateTime(); // now $d2 = new DateTime('2014-01-08'); // set the date
$d1 = new DateTime(); // now
$d2 = new DateTime('2014-01-08'); // set the date +1 to compensate for 1-day
error in script
$diff = $d2->diff($d1);
list($y,$m,$d) = explode('-', $diff->format('%y-%m-%d'));
$months = $y*12 + $m;
$weeks = floor($d/7);
$days = $d%7;
printf('Countdown To Event - ');
if ($months) {printf('%d month%s ', $months, $months>1?'s':'');}
if ($weeks) {printf('%d week%s ', $weeks, $weeks>1?'s':'');}
if ($days) {printf('%d day%s ', $days, $days>1?'s':'');}
试试这个:
<?php
$d1 = new DateTime(); // now
$d2 = new DateTime('2014-01-08'); // set the date +1 to compensate for 1-day
$diff = $d2->diff($d1);
list($y,$m,$d) = explode('-', $diff->format('%y-%m-%d'));
if ($d1 < $d2) {
$months = $y*12 + $m;
$weeks = floor($d/7);
$days = $d%7;
printf('Countdown To Event - ');
if ($months) {printf('%d month%s ', $months, $months>1?'s':'');}
if ($weeks) {printf('%d week%s ', $weeks, $weeks>1?'s':'');}
if ($days) {printf('%d day%s ', $days, $days>1?'s':'');}
}
您需要检查差异是正的还是负的。由于diff
方法返回DateInterval
,因此可以检查invert
属性
$d1 = new DateTime(); // now
$d2 = new DateTime('2014-01-08');
$diff = $d2->diff($d1);
if ($diff->invert == 1) // the countdown is running
{
list($y,$m,$d) = explode('-', $diff->format('%y-%m-%d'));
$months = $y*12 + $m;
$weeks = floor($d/7);
$days = $d%7;
printf('Countdown To Event - ');
if ($months) {printf('%d month%s ', $months, $months>1?'s':'');}
if ($weeks) {printf('%d week%s ', $weeks, $weeks>1?'s':'');}
if ($days) {printf('%d day%s ', $days, $days>1?'s':'');}
}
else
{
// The countdown finished, do something!
}
有很多方法可以做到这一点
我认为比较容易的是:
$FinalDate='2013-09-23';
$d1 = new DateTime(); // now
$d2 = new DateTime($FinalDate); // set the date +1 to compensate for 1-day
$diff = $d2->diff($d1);
list($y,$m,$d) = explode('-', $diff->format('%y-%m-%d'));
$months = $y*12 + $m;
$weeks = floor($d/7);
$days = $d%7;
if(strtotime($FinalDate)>time()){
printf('Countdown To Event - ');
if ($months) {printf('%d month%s ', $months, $months>1?'s':'');}
if ($weeks) {printf('%d week%s ', $weeks, $weeks>1?'s':'');}
if ($days) {printf('%d day%s ', $days, $days>1?'s':'');}
}else{
echo "Actions AFTER the date";
}
然而,这段代码看起来非常糟糕,您可以做得更好。
你可以用javascript来做,还可以放一个漂亮的秒计数器 谢谢。这是一个有效的选择。现在我将使用更简单的if($d1<$d2){}建议。谢谢。这是一个有效的选择。现在我将使用更简单的if($d1<$d2){}建议。