web-dev-qa-db-ja.com

PHPの日付が別の日付よりも小さい

この種の日付オブジェクトが与えられた場合date("m/d/Y", strtotime($numerical." ".$day." of ".date("F")))

たとえば、「8月の最初の月曜日」であるyyyy/mm/dd/yyyyの日を与える場合があります。たとえば、

この日付が今日の日付より大きいか、小さいか、または等しいかをどのように判断できますか?

この形式で機能し、日付オブジェクト間で比較できるnow()メソッドが必要です

まだdate()<date()を試していません。しかし、私はそれがうまくいくとは思いません

どんな洞察も感謝

9
CQM

タイムスタンプを比較します。

_if (strtotime($numerical." ".$day." of ".date("F")) < time()) {
    // older
} else {
    // newer
}
_

strtotime()は1.1.1970からの秒数を返し、time()も返すため、これは可能です。そしてPHPでは整数を簡単に比較できます...

18
bwoebi

最初はあなたの質問を誤解しました。あなたが言うように比較で日付objectを使用しているのではなく、日付の文字列表現(dateによって作成された)を使用しています)。

日付のほとんどすべての文字列表現を現在のtimeと比較するのは簡単です。

$now = time();
$date = '2015/03/12'; #could be (almost) any string date

if (strtotime($date) > $now) {
    #$date occurs in the future
} else {
    #$date occurs now or in the past
}

日付文字列と現在のdayを比較するのは少しだけ複雑です。これを行う1つの方法を次に示します。

$today_start = strtotime('today');
$today_end = strtotime('tomorrow');
$date = '2015/03/12'; #could be (almost) any string date

$date_timestamp = strtotime($date);

if ($date_timestamp >= $today_end) {
    #$date occurs after today
} elseif ($date_timestamp < $today_start) {
    #$date occurs before today
} else {
    #$date occurs today
}

timeを使用して現在時刻を秒に下げるのではなく、今日の日付をブックエンドする2つの真夜中のタイムスタンプを計算します。次に、それらと比較します。

これを行うには、より賢い方法があります(YYYY/MM/DD日付と今日の表現)ですが、この例は最初の例にうまく基づいています。

26
ell