0

所以这是我需要做的:

  • 从数据库中获取时间(暂时不要担心数据库的东西)
  • 以天、小时和分钟为单位的倒计时时间
  • 当倒计时达到 0 时,将倒计时增加 7 天,同时将情节计数增加 1
  • 重复多次,直到剧集计数达到一定数量(由数据库设置,此时再次不要太担心数据库的内容)然后停止倒计时并回显 Aired

基本上它会倒计时到电视节目的下一集播出时间并显示下一集的编号,这将一直持续到所有剧集播出。

这是我目前所拥有的,它在一定程度上有效,但只会+7天/++集一次,之后倒计时将变为负数。我已经尝试过while循环和其他一些东西,但我没有太多运气。

$date = "February 12, 2013 5:06 PM";
$date = strtotime($date);
$remaining = $date - time();

$episode = 0;

if ($remaining < 0) {
++$episode;
$remaining = strtotime("+7 day", $date) -time();
}

$days_remaining = floor($remaining / 86400);
$hours_remaining = floor(($remaining % 86400) / 3600);
$mins_remaining = floor(($remaining % 86400 % 3600) / 60);

if ($episode == 3){
 echo "Aired";
} else {
echo "$days_remaining:$hours_remaining:$mins_remaining Ep $episode";
}

任何建议都非常感谢,谢谢!

4

1 回答 1

0

当然会变成负数。

$remaining达到 0后,再增加 7 天。

if ($remaining < 0) { // remaining: less than 0 days
++$episode; // episode becomes 1
$remaining = strtotime("+7 day", $date) -time(); // remaining: less than 7 days
}

但是,再过 7 天后,$remaining仍然是负数,只增加了 7 天。由于您还没有保存$episode在数据库中,因此根据代码它仍然是 0。

$episode = 0; // $episode starts at 0 according to the code
if ($remaining < 0) { // remaining: less than -7 days
++$episode; // episode becomes 1

所以它继续负数并给你$episode == 1

你应该这样做:

$date = strtotime("February 12, 2013 5:06 PM");
for ($i = 0; $i < 3; $i++) {
    $episodes[$i+1] = strtotime("+". 7*$i ." day", $date);
    $remainings[$i+1] = $episodes[$i+1] - time();
}
foreach ($remainings as $key => $remaining) {
    if ($remaining > 0) {
        $episode = $key;
        $days_remaining = floor($remaining / 86400);
        $hours_remaining = floor(($remaining % 86400) / 3600);
        $mins_remaining = floor(($remaining % 86400 % 3600) / 60);
        break;
    }
}
if (!isset($episode)){
    echo "Aired";
} else {
    echo "$days_remaining:$hours_remaining:$mins_remaining Ep $episode";
}
于 2013-02-15T18:14:18.170 回答