1

strtotimeを使用して現在の時刻と2回比較する以下のphpコードがあります。

 $timingsfirstTime[0] = date("H:i:s", strtotime(trim($showTimings[0])));
 $timingslastTime[2] = date("H:i:s", strtotime(trim($showTimings[2])));

// 最初のショーの開始時刻が、チャンネルの最後のショーの最後の時刻よりも大きいことを確認します

        $current_time = date("H:i:s",strtotime('now'));

        $this->assertTrue(($current_time > $timingsfirstTime[0] && $current_time < $timingslastTime[2]),"current time ".$current_time. " is not greater than current show start time ". $timingsfirstTime[0] . " or current time is not less than current show end time ".$timingslastTime[2]); 

しかし、私のアサーションはどういうわけか失敗し、次のように出力されます。

現在の時刻 00:38:45 が現在の番組開始時刻 23:50:00 より大きくないか、現在の時刻が現在の番組終了時刻 00:50:00 より小さくない

4

1 に答える 1

3

日付の比較ではなく、文字列の比較を行っているため、「失敗」しています。

DateTime読みやすく、コードが少なく、ネイティブに比較できるため、代わりに使用してください。また、どのケースが失敗したかを簡単に判断できるように、アサーションを 2 つのアサーションに分割します。

$now = new DateTime();
$start = new DateTime($showTimings[0]);
$end = new DateTime($showTimings[2]);

$this->assertTrue(
    $now > $start,
    'current time ' . $now->format('H:i:s')
        . ' is not greater than current show start time '
        . $start->format('H:i:s')
);

$this->assertTrue(
    $now < $end,
    'current time ' . $now->format('H:i:s')
        . ' is not less than current show end time '
        . $end->format('H:i:s')
);
于 2012-08-22T00:02:39.777 に答える