Wie kann ich überprüfen, ob das aktuelle Datum / die aktuelle Uhrzeit nach einem festgelegten Datum / einer festgelegten Uhrzeit liegt?

115

Ich versuche ein Skript zu schreiben, das überprüft, ob das aktuelle Datum / die aktuelle Uhrzeit nach dem liegt 05/15/2010 at 4PM

Wie kann ich die date () -Funktion von PHP verwenden, um diese Prüfung durchzuführen?

Dave
quelle

Antworten:

228

Da PHP> = 5.2.2 ist, können Sie die DateTimeKlasse als solche verwenden:

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
}

Die an den DateTime-Konstruktor übergebene Zeichenfolge wird gemäß diesen Regeln analysiert .


Beachten Sie, dass es auch möglich ist, timeund strtotimeFunktionen zu verwenden. Siehe Originalantwort .

Salman A.
quelle
6
Der Zeitstempel hat einige Einschränkungen, und einige Fehler auch, zum Beispiel kann ein Zeitstempel kein Datum vor 1970 und nach 2038 verarbeiten (siehe Ivar Kosters Antwort)
Steel Brain
1
Wir sehen oft einen Missbrauch von new DateTime () ohne Parameter. Wenn Sie UTC-Daten verwenden (wie Sie sollten), bevorzugen Sie die Verwendung von new DateTime ("jetzt", neue DateTimeZone ('UTC')). Dies verhindert, dass Ihre App Fehler in Daten missversteht. Ich rate Ihnen, es in einer statischen Funktionsvariablen, einer statischen Klasse oder an einer anderen Stelle in Ihrem laufenden Prozess zu speichern ...
Loenix
Was ist, wenn wir bereits ein DateTime-Objekt haben und wissen möchten, ob dies vorbei ist, da wir ein Objekt nicht wie von Ihnen vorgeschlagen an den DateTime-Konstruktor übergeben können? sollten wir seinen getTimestamp () verwenden und ihn mit time () vergleichen? @ Salman A
user4271704
@ user4271704 Dies new DateTime('2010-05-15')ist nur ein Beispiel. Dies kann ein beliebiges DateTime-Objekt sein, das Sie zuvor initialisiert haben.
Salman A
Angenommen, es $objecthandelt sich um ein DateTime-Objekt, das ich verwendet habe if (new DateTime() > $object) {}und das falsch funktioniert. Funktioniert aber if (time() > $bject->getTimeStamp()) {}korrekt. @ Salman A
user4271704
77

Es gibt auch die DateTime- Klasse, die eine Funktion für Vergleichsoperatoren implementiert.

// $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';
}
VolkerK
quelle
1
Was implementiert die Funktion dafür?
still_dreaming_1
6

Überprüfen Sie die PHP-Funktion strtotime, um Ihr festgelegtes Datum / Ihre Uhrzeit in einen Zeitstempel umzuwandeln: http://php.net/manual/en/function.strtotime.php

Wenn Sie strtotimeIhr Datums- / Zeitformat nicht richtig verarbeiten können ("16:00 Uhr" funktioniert wahrscheinlich, aber nicht "um 16:00 Uhr"), müssen Sie Zeichenfolgenfunktionen verwenden, z. B. substrum Ihr Format zu analysieren / zu korrigieren und Ihren Zeitstempel abzurufen eine andere Funktion, z mktime.

Vergleichen Sie dann den resultierenden Zeitstempel mit dem aktuellen Datum / der aktuellen Uhrzeit ( if ($calulated_timestamp > time()) { /* date in the future */ }), um festzustellen, ob das eingestellte Datum / die eingestellte Uhrzeit in der Vergangenheit oder in der Zukunft liegt.

Ich schlage vor, das PHP-Dokument über Datums- / Zeitfunktionen zu lesen und mit einem Teil Ihres Quellcodes hierher zurückzukehren, sobald Sie nicht weiterkommen.

Select0r
quelle
siehe Ivar Kosters Antwort
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;
}
Rakesh Kumar Pradhan
quelle
Sicherlich wird dies nicht so funktionieren, wie $myDatees gleich sein wird string (0) "".
Nikola Petkanski