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?
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'));
if (strtotime($event['date']) < time()) {
// past date
}
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
}