PHP Prüft, ob das Datum nach einem bestimmten Datum liegt, das in einem bestimmten Format angegeben ist

Lesezeit: 2 Minuten

Ich habe einen PHP-Ereigniskalender, der die Datenbank abfragt, um die Daten zu erhalten.

Ich zeige das Ereignisdatum an mit:

$event['date']

und diese Anzeige ist in diesem Format:

2013-07-31 zum Beispiel.

Jetzt muss ich überprüfen, ob dieses Datum ein vergangenes Datum zum aktuellen Datum ist.

Wie kann ich das machen?

Benutzer-Avatar
Amal Murali

Sie können die Daten mit denen von PHP vergleichen DateTime Klasse:

$date = new DateTime($event['date']);
$now = new DateTime();

if($date < $now) {
    echo 'date is in the past';
}

Hinweis: Verwenden DateTime Klasse wird vorgezogen strtotime() da letzteres nur für Daten vor 2038 funktioniert. Lesen Sie mehr über die Jahr_2038_Problem.

  • Ich würde die Verwendung sehr empfehlen $date = DateTime::createFromFormat('Y-m-d', '2013-07-31'); stattdessen. Das Beispiel von OP ist das ISO8601-Format, daher besteht eine große Chance, dass die DateTime-Klasse es jedes Mal richtig “herausfindet”, aber für unterschiedliche DateTime-Formate ist es viel sicherer, das Datumsformat anzugeben, aus dem Sie instanziieren, um sicherzustellen, dass es nicht versteckt ist Fehler in der Umformung.

    – Wir s

    17. September 2018 um 12:42 Uhr


  • @Wes Ich mag deinen Ansatz =)

    –Pierre

    27. November 2019 um 1:16 Uhr

  • Hinweis, ggf $event['date'] ist das heutige Datum (ohne Uhrzeit), wird es als “in der Vergangenheit” betrachtet. Um Daten ohne Uhrzeit zu vergleichen, können Sie dies tun $now = new DateTime(date('Y-m-d'));

    – Von einem Grue gefressen

    29. Juni 2021 um 21:16 Uhr

Sie können verwenden strtotime() und time():

if (strtotime($event['date']) < time()) {
    // past date
}

Benutzer-Avatar
Menon Jats

@Satch3000 Sie haben die falsche Antwort als richtige Lösung akzeptiert ( @Amal Murali )

Bitte sehen Sie sich die Ausgabe an. Hier gebe ich das heutige Datum ein, aber es gibt das aktuelle Datum als vergangenes Datum zurück.

<?php

/* Enter today date */
$date = new DateTime("09/14/2017");
$now = new DateTime();

print_r($date);

print_r($now);


if($date < $now) {
    echo 'date is in the past';
}

Ausgabe wird

DateTime Object
(
    2023 => 2017-09-14 00:00:00.000000
    [timezone_type] => 3
    [timezone] => UTC
)
DateTime Object
(
    2023 => 2017-09-14 07:12:52.000000
    [timezone_type] => 3
    [timezone] => UTC
)
date is in the past

Lösung

$Date1 = strtotime(date('Y-m-d', strtotime('2017-09-15') ) ).' ';
$Date2 = strtotime(date('Y-m-d'));

  if($Date1 < $Date2) {
        echo 'date is in the past';
    }

  • Nö! Das ist nicht die Lösung. Siehe akzeptierte Antwort. Es ist jetzt behoben. Wegen des Jahr-2038-Problems sollten Sie niemals strtotime verwenden.

    – sij

    27. August 2019 um 18:56 Uhr

  • Aber… 2017-09-14 00:00:00.000000 ist vor 2017-09-14 07:12:52.000000.

    – Karl Holz

    13. August 2020 um 15:23 Uhr

if (time() > strtotime($event['date']))
{
    // current date is greater than 2013-07-31 
}

strtotime analysiert den Datumsstich mit diese Regeln.

1310600cookie-checkPHP Prüft, ob das Datum nach einem bestimmten Datum liegt, das in einem bestimmten Format angegeben ist

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy