10

varchar フィールドとして午後 7 時 30 分などの時間をデータベースに保存しました。この時間が現在の時間よりも大きいかどうかを確認したい。

DB時間文字列を「19:30」に変換しましたが、次のようなことをしたいと思います:

$my_time = '19:30';

if($my_time  > date('H:i'))
{
    do something ...
}

問題は、$my_time が空でない文字列の場合、上記が常に true を返すことです。

することstrtotime($my_time)も助けにはなりません。

strtotime('H:i',$my_time)00:00 にします。

実行(int)date('H:i')すると、実際の時刻が 17:09 のときに 1700 が返されるため、コロンを削除してから比較してもうまくいきません....

このコンテキストでは、データベースの時刻データを変更することは論外です。

助けてください。事実を間違って述べた場合は訂正してください。

4

5 に答える 5

14

これを使用できます:

$myTime = '19:30';
if (date('H:i') == date('H:i', strtotime($myTime))) {
    // do something
}
于 2012-05-08T11:47:44.993 に答える
5

ランダムな日付に時刻を設定して、新しいDateTimeオブジェクトを作成できます。これらの 2 つのオブジェクトを比較するより。例えば:

$my_time = new DateTime('January 1th 1970 19:30');
$comparable_time = new DateTime('January 1th 1970 '. date('H:i'));
if($my_time < $comparable_time) {
    // do something
} else {
    // do something else
}

変更ログに注意してください。

Version 5.2.2    DateTime object comparison with the comparison operators changed to work as expected. Previously, all DateTime objects were considered equal (using ==).
于 2012-05-08T11:48:39.593 に答える
3

このような文字列では比較演算子を使用できません。これを行うと、文字列が最初に数値に変換されるためです

ワンライナーソリューションの場合、次を使用できますstrcmp

if(strcmp($my_time, date('H:i')) == 1)
{
    do something ...
}

上記の条件は、「$ my_timeが現在の時刻よりも大きい場合」と意味的に同等ですが、文字列の形式が一貫している場合に限ります。 何らかの理由での形式がパターンに直接対応していない場合、このコードにバグを導入するのは非常に簡単です。$my_timeH:i

値を文字列にダムダウンすることは、通常、日付と時刻を使用する方法ではありません。より適切な解決策は、PHP 5.2.0で導入されたネイティブクラスを使用することです(John Condeはすでに彼の回答DateTimeで例を示しています)。

ただし、時間をダムスカラー値として扱うことには1つの利点もあります。結果は、01:00は常に00:00より遅いという人間の認識と一致しています。DateTimeアプローチはローカルのタイムゾーンと日付に依存し、常に期待される結果が得られるとは限りません。例:

// assume we are in London
date_default_timezone_set('Europe/London');

// assume that today is March 25, 2012
$date1 = new DateTime("2012-03-25 01:00:00");
$date2 = new DateTime("2012-03-25 02:00:00");

// and...
if ($date1 == $date2) {
    echo "WTF?!? Equal???";
}

実際の動作をご覧ください

このテストの結果は、「01:00」と「02:00」のスカラー表現を比較する結果とは異なるため、比較のための適切なセマンティクスを検討することをお勧めします。

于 2012-05-08T11:45:41.903 に答える
1
$date1 = DateTime::createFromFormat('H:i', $my_time1);
$date2 = new DateTime();
if ($date1 > $date2)
{
     // do something   
}
于 2012-05-08T11:46:16.347 に答える