現在の日時が設定された日時を過ぎているかどうかを確認するにはどうすればよいですか?


115

現在の日付/時刻が過去の日付かどうかをチェックするスクリプトを作成しようとしています 05/15/2010 at 4PM

PHPのdate()関数を使用してこのチェックを実行するにはどうすればよいですか?

回答:


228

PHP> = 5.2.2なのでDateTime、次のようにクラスを使用できます。

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) {
    # current time is greater than 2010-05-15 16:00:00
    # in other words, 2010-05-15 16:00:00 has passed
}

DateTimeコンストラクターに渡された文字列は、これらのルールに従って解析されます


timestrtotime機能を使用することも可能であることに注意してください。元の回答を参照してください


6
タイムスタンプにはいくつかの制限があり、いくつかのバグもあります。たとえば、タイムスタンプは1970年より前と2038年より後の日付を処理できません(Ivar Kosterの回答を参照)
Steel Brain

1
パラメータなしのnew DateTime()の乱用がよく見られます。UTC日付を使用している場合(必要に応じて)、new DateTime( "now"、new DateTimeZone( 'UTC'))を使用することをお勧めします。これにより、日付の誤解を招くバグからアプリが保護されます。関数の静的変数、クラスの静的、または実行中のプロセスの他の場所に保存することをお勧めします...
Loenix

DateTimeオブジェクトが既にあり、オブジェクトをDateTimeコンストラクターに渡すことができないため、これが過去かどうかを知りたい場合はどうでしょうか。getTimestamp()を使用して、time()と比較する必要がありますか?@Salman A
user4271704

@ user4271704これnew DateTime('2010-05-15')は単なる例であり、以前に初期化した任意のDateTimeオブジェクトにすることができます。
Salman A

$objectDateTimeオブジェクトであると仮定して、私は使用しましたが、正しくif (new DateTime() > $object) {}動作しません。しかし、if (time() > $bject->getTimeStamp()) {}正しく動作します。@Salman A
user4271704

77

比較演算子の関数を実装するDateTimeクラスもあります。

// $now = new DateTime();
$dtA = new DateTime('05/14/2010 3:00PM');
$dtB = new DateTime('05/14/2010 4:00PM');

if ( $dtA > $dtB ) {
  echo 'dtA > dtB';
}
else {
  echo 'dtA <= dtB';
}

1
このために機能は何を実装していますか?
still_dreaming_1 2017

6

PHPのstrtotime-functionをチェックして、設定した日付/時刻をタイムスタンプに変換します。http://php.net/manual/en/function.strtotime.php

strtotime日付/時刻の形式を正しく処理できない場合( "4:00 PM"はおそらく機能しますが、 "at 4PM"は機能しません)、substr形式を解析/修正してタイムスタンプを取得するなど、文字列関数を使用する必要があります。別の機能、例えばmktime

次に、結果のタイムスタンプを現在の日付/時刻(if ($calulated_timestamp > time()) { /* date in the future */ })と比較して、設定された日付/時刻が過去か未来かを確認します。

日付/時間関数に関するPHP-docを読んで、行き詰まったらソースコードの一部をここに戻すことをお勧めします。


Ivar Kosterの回答をご覧ください
Steel Brain

1
date_default_timezone_set('Asia/Kolkata');

$curDateTime = date("Y-m-d H:i:s");
$myDate = date("Y-m-d H:i:s", strtotime("2018-06-26 16:15:33"));
if($myDate < $curDateTime){
    echo "active";exit;
}else{
    echo "inactive";exit;
}

確かにこれは$myDateと同じようには機能しませんstring (0) ""
Nikola Petkanski
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.