coffee_
@coffee_

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPで時刻ではなく時間を比較したい

PHPで時間を比較する

PHPで時刻ではなく時間を比較したいです。

例)
制限時間10:00:00(10時間)
に対して入力値が制限時間内であるか判定したいです。
(時間フォーマットは00:00:00の形でもってる)

発生している問題・エラー

DateTimeクラスは時間ではなく時刻を扱うもののようで
それをつかえば何とかなりそうではありますがしっくりこず・・・

何かいい方法はないものか困っています。
ご教示いただけますと幸いです。
よろしくお願いいたします。

0

2Answer

strtotimeを使うのがベターかと。
(以下では日付を指定していないので、処理日のタイムスタンプを取得しています)

$limit = '10:00:00';
$time = '01:23:45'; // 入力値

if (strtotime($limit) >= strtotime($time)) {
    // 時間内
} else {
    // 超過
}
0Like

Comments

  1. @coffee_

    Questioner

    日付を指定しなければいいのですね!シンプルでわかりやすいです!
    ご回答ありがとうございました。

時間であるなら秒に換算して比較するのはいかがですか?

$limit = 36000; // 10時間

$value = '10:00:01'; // 入力
list($h, $m, $s) = explode(":", $value);
$sec = ($h * 3600) + ($m * 60) + $s;

if ($sec > $limit) {
    echo 'NG';
} else {
    echo 'OK';
}
0Like

Comments

  1. @coffee_

    Questioner

    とてもしっくりきました。
    制限時間が60時間を超える可能性がある場合はこちらが良さそうですね!
    ご回答ありがとうございました。
  2. var_dump(strtotime('25:00:00')); // bool(false)

    PHP8.1.3ではこのような結果になりました。
    日時関係の処理は予想外の動きをすることがあるので、手軽さとのトレードオフになりますね。
  3. @coffee_

    Questioner

    ありがとうございます!
    私のほうでも動作確認しました。
    ここで質問していなければ秒で換算するやり方にはたどり着けていなかったと思います。
    感謝いたします。

Your answer might help someone💌