0

「FinishedLesson」が4日前かどうかをチェックする関数を書こうとしています。たとえば、そのレッスンがその時間範囲内にあったかどうかを確認するにはどうすればよいですか。昨日、2日前、3日前、4日前に終了した場合、「4日前」の時間範囲にあるので本当です。

これを確認するにはどうすればよいですか?

これまでのところ、私は次のことを行いました。

$time = time();

$fourDays = 345600;
$threeDays = 259200;
$lastLesson = $ml->getLesson($cid, $time, true);

$lastLessonDate = $lastLesson['deadline'];
$displayLastLesson = false;
if ($lastLessonDate  + $fourDays < $time)
{
    $displayLastLesson = true;
    //We print lesson that was finished less than 4 days ago
}
else
{
    //We print lesson that is in the next 3 days

}

現在、ifステートメントは真になり続けていますが、5月3日にレッスンが終了したため、これは私が望んでいることではありません。5月7日に終わったレッスンは本当だと思いますか?

4

2 に答える 2

2
$time = time();
$fourDays = strtotime('-4 days');
$lastLesson = $ml->getLesson($cid, $time, true);

$lastLessonDate = $finishedLesson['deadline'];
$displayLastLesson = false;
if ($lastLessonDate >= $fourDays && $lastLessonDate <= $time)
{
    $displayLastLesson = true;
    //We print lesson that was finished less than 4 days ago
}
else
{
    //We print lesson that is in the next 3 days

}
于 2012-05-10T11:33:50.517 に答える
0

すべての計算は、今日の午前 12 時に相対的に計算する必要がtime()あります。現在の時刻 (例: 午後 6 時) ではありません。これを行うと、1 日前 (現在 - 24 時間) は昨日の午後 6 時から今日までの時間を意味するため、これは問題です。午後6時。代わりに、昨日は、昨日の午前 0 時から今日の午前 0 時までの時間を意味する必要があります。

以下は、アイデアを説明するための単純化された計算です。

$lastLessonDate = strtotime($lastLessonDate);
$today = strtotime(date('Y-m-d')); // 12:00am today , you can use strtotime('today') too
$day = 24* 60 * 60;
if($lastLessonDate > $today) // last lesson is more than 12:00am today, meaning today
 echo 'today';
else if($lastLessonDate > ($today - (1 * $day))
 echo 'yesterday';
else if($lastLessonDate > ($today - (2 * $day))
 echo '2 days ago';
else if($lastLessonDate > ($today - (3 * $day))
 echo '3 days ago';
else if($lastLessonDate > ($today - (4 * $day))
 echo '4 days ago';
else
 echo 'more than 4 days ago';
于 2012-05-10T11:52:59.897 に答える