Vergleichen Sie das angegebene Datum mit dem heutigen
216
Ich habe folgendes
$var ="2010-01-21 00:00:00.0"
Ich möchte dieses Datum mit dem heutigen Datum vergleichen (dh ich möchte wissen, ob dies $varvor dem heutigen Tag liegt oder heute gleich ist oder nicht).
Das ist das Schöne an diesem Format: Es bestellt gut. Das kann natürlich sein dies abhängig von Ihren genauen Umständen weniger effizient sein, aber es kann auch viel praktischer sein und zu einem besser wartbaren Code führen - wir müssten mehr wissen, um dieses Urteil wirklich zu fällen.
Für die richtige Zeitzone können Sie beispielsweise Folgendes verwenden:
date_default_timezone_set('America/New_York');
Klicken Sie hier , um auf die verfügbaren PHP-Zeitzonen zu verweisen.
@anushr, wenn im Vergleich eine Zeitzone benötigt wird, kann die Zeitdifferenz vor dem Vergleich zum Datum hinzugefügt werden. Dies ist immer noch schneller als der Versuch, zwei Datums- / Uhrzeitzeichenfolgen im mm/dd/yyyyFormat in Datum zu konvertieren und dann zu vergleichen. Es macht mir immer Sorgen, wenn Entwickler Daten in mehreren Zeitzonen in ihrem System haben. Ich denke, es ist besser, Daten in Ihrem System zu speichern, immer in einer einzigen Zeitzone, und sie dann in der gewünschten Zeitzone anzuzeigen. Ich habe um 1998 angefangen, yyyy-mm-ddFormat (oder yyyymmdd) zu verwenden, als mir klar wurde, dass es selbst in SQL Server viel schneller sortiert.
AaA
59
Bitte schön:
function isToday($time)// midnight second{return(strtotime($time)=== strtotime('today'));}
isToday('2010-01-22 00:00:00.0');// true
Einige weitere Hilfsfunktionen:
function isPast($time){return(strtotime($time)< time());}function isFuture($time){return(strtotime($time)> time());}
Warum die seltsame Rückwärtslogik und die fremden Booleschen Werte? Warum nicht einfach "strtotime ($ time) == strtotime ('today') zurückgeben", "strtotime ($ time)> time () zurückgeben" und "strtotime ($ time) <time () zurückgeben"?
Bobby Jack
@ Bobby Jack: Ich hatte mehr Funktionen in diesen Funktionen und habe vergessen, den zusätzlichen Code zu löschen. Jetzt behoben.
Alix Axel
+1 auf der Hilfsfunktion, speziell isPast b / c Ich habe gerade a ausgeführt if(strtotime('2013-01-22 00:00:00.00') < time()){....}und das hat es für mich getan.
MDMoore313
47
Um BoBby Jack zu vervollständigen, verwenden Sie DateTime OBject, wenn Sie PHP 5.2.2+ haben:
if(newDateTime()>newDateTime($var)){// $var is before today so use it}
Das ist nicht richtig. Wenn $ var der aktuelle Tag ist (nach genau Mitternacht), ist new DateTime () größer als new DateTime ($ var) und es ist nicht wahr, dass $ var vor heute liegt.
$toBeComparedDate ='2014-08-12';
$today =(newDateTime())->format('Y-m-d');//use format whatever you are using
$expiry =(newDateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today)> strtotime($expiry));//false or true
Und Sie benötigen PHP> = 5.4 für (neues DateTime ()) -> Format ('Ym-d');
webrama.pl
6
Eine Vorsichtsmaßnahme nach meiner Erfahrung: Wenn Ihr Zweck nur das Datum betrifft, achten Sie darauf, den Zeitstempel anzugeben . Zum Beispiel sagen wir heute ist "2016-11-09". Ein Vergleich mit einem Zeitstempel macht die Logik hier ungültig. Beispiel,
// input
$var ="2016-11-09 00:00:00.0";// check if date is today or in the futureif( time()<= strtotime($var)){// This seems right, but if it's ONLY date you are after// then the code might treat $var as past depending on// the time.}
Der obige Code scheint richtig zu sein, aber wenn es NUR das Datum ist, das Sie vergleichen möchten, ist der obige Code nicht die richtige Logik. Warum? Weil time () und strtotime () einen Zeitstempel enthalten. Das heißt, obwohl beide Daten auf denselben Tag fallen, spielt der Zeitunterschied eine Rolle. Betrachten Sie das folgende Beispiel:
// plain date string
$input ="2016-11-09";
Da es sich bei der Eingabe um eine einfache Datumszeichenfolge handelt, wird bei Verwendung von strtotime()on $inputdavon ausgegangen, dass es die Mitternacht des 09.11.2016 ist. time()Wenn Sie also jederzeit nach Mitternacht laufen, ist dies immer eine gute Sache$input als Vergangenheit , auch wenn sie am selben Tag stattfinden.
Um dies zu beheben, können Sie einfach wie folgt codieren:
if(date("Y-m-d")<= $input){
echo "Input date is equal to or greater than today.";}
Ich bin mir sicher, dass OP dies in Betracht gezogen hat, und deshalb haben sie "00: 00: 00.0" in ihre Frage aufgenommen
AaA
6
Wenige Jahre später stimme ich Bobby Jacks Beobachtung zu, dass die letzten 24 Stunden nicht heute sind !!! Und ich bin überrascht, dass die Antwort so positiv bewertet wurde ...
Um zu vergleichen, ob ein bestimmtes Datum kleiner, gleich oder größer als ein anderes ist, müssen Sie es zuerst bis zum Beginn des Tages "ablehnen". Mit anderen Worten, stellen Sie sicher, dass Sie an beiden Daten über dieselbe 00:00:00 Uhr sprechen. Dies kann einfach und elegant erfolgen als:
strtotime("today")<=> strtotime($var)
wenn $var der Zeitteil auf 00:00:00 wie im OP angegeben ist.
Ersetzen <=> durch alles, was Sie brauchen (oder behalten Sie es so in PHP 7)
//create objects for the dates to compare
$date1=date_create($someDate);
$date2=date_create(date("Y-m-d"));
$diff=date_diff($date1,$date2);//now convert the $diff object to type integer
$intDiff = $diff->format("%R%a");
$intDiff = intval($intDiff);//now compare the two datesif($intDiff >0){echo '$date1 is in the past';}else{echo 'date1 is today or in the future';}
Ich hoffe das hilft. Mein erster Beitrag zum Stackoverflow!
Antworten:
Verwandelt es in einen Zeitwert
Gibt Ihnen die Sekunden seit
$var
Überprüft, ob
$var
es innerhalb des letzten Tages gewesen ist.quelle
Dieses Format ist perfekt für einen Standard-Zeichenfolgenvergleich geeignet, z
Um das heutige Datum in diesem Format zu erhalten, verwenden Sie einfach :
date("Y-m-d H:i:s")
.So:
Das ist das Schöne an diesem Format: Es bestellt gut. Das kann natürlich sein dies abhängig von Ihren genauen Umständen weniger effizient sein, aber es kann auch viel praktischer sein und zu einem besser wartbaren Code führen - wir müssten mehr wissen, um dieses Urteil wirklich zu fällen.
Für die richtige Zeitzone können Sie beispielsweise Folgendes verwenden:
Klicken Sie hier , um auf die verfügbaren PHP-Zeitzonen zu verweisen.
quelle
mm/dd/yyyy
Format in Datum zu konvertieren und dann zu vergleichen. Es macht mir immer Sorgen, wenn Entwickler Daten in mehreren Zeitzonen in ihrem System haben. Ich denke, es ist besser, Daten in Ihrem System zu speichern, immer in einer einzigen Zeitzone, und sie dann in der gewünschten Zeitzone anzuzeigen. Ich habe um 1998 angefangen,yyyy-mm-dd
Format (oderyyyymmdd
) zu verwenden, als mir klar wurde, dass es selbst in SQL Server viel schneller sortiert.Bitte schön:
Einige weitere Hilfsfunktionen:
quelle
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
und das hat es für mich getan.Um BoBby Jack zu vervollständigen, verwenden Sie DateTime OBject, wenn Sie PHP 5.2.2+ haben:
quelle
Sie können die
DateTime
Klasse verwenden:Vergleichsoperatoren arbeiten *:
Es ist auch möglich, die Zeitstempelwerte von DateTime-Objekten abzurufen und zu vergleichen:
* Beachten Sie, dass
===
beim Vergleich zweier verschiedener DateTime-Objekte false zurückgegeben wird, auch wenn sie dasselbe Datum darstellen.quelle
$future
ist Vergangenheit geworden. : Pquelle
$var
auch in OPEine Vorsichtsmaßnahme nach meiner Erfahrung: Wenn Ihr Zweck nur das Datum betrifft, achten Sie darauf, den Zeitstempel anzugeben . Zum Beispiel sagen wir heute ist
"2016-11-09"
. Ein Vergleich mit einem Zeitstempel macht die Logik hier ungültig. Beispiel,Der obige Code scheint richtig zu sein, aber wenn es NUR das Datum ist, das Sie vergleichen möchten, ist der obige Code nicht die richtige Logik. Warum? Weil time () und strtotime () einen Zeitstempel enthalten. Das heißt, obwohl beide Daten auf denselben Tag fallen, spielt der Zeitunterschied eine Rolle. Betrachten Sie das folgende Beispiel:
Da es sich bei der Eingabe um eine einfache Datumszeichenfolge handelt, wird bei Verwendung von
strtotime()
on$input
davon ausgegangen, dass es die Mitternacht des 09.11.2016 ist.time()
Wenn Sie also jederzeit nach Mitternacht laufen, ist dies immer eine gute Sache$input
als Vergangenheit , auch wenn sie am selben Tag stattfinden.Um dies zu beheben, können Sie einfach wie folgt codieren:
quelle
Wenige Jahre später stimme ich Bobby Jacks Beobachtung zu, dass die letzten 24 Stunden nicht heute sind !!! Und ich bin überrascht, dass die Antwort so positiv bewertet wurde ...
Um zu vergleichen, ob ein bestimmtes Datum kleiner, gleich oder größer als ein anderes ist, müssen Sie es zuerst bis zum Beginn des Tages "ablehnen". Mit anderen Worten, stellen Sie sicher, dass Sie an beiden Daten über dieselbe 00:00:00 Uhr sprechen. Dies kann einfach und elegant erfolgen als:
wenn
$var
der Zeitteil auf 00:00:00 wie im OP angegeben ist.Ersetzen
<=>
durch alles, was Sie brauchen (oder behalten Sie es so in PHP 7)Außerdem sprechen wir natürlich für beide von derselben Zeitzone. Für eine Liste der unterstützten Zeitzonen
quelle
(Das Beispiel von w3schools funktioniert perfekt.)
quelle
Erweiterung von Josuas Antwort von w3schools:
Ich hoffe das hilft. Mein erster Beitrag zum Stackoverflow!
quelle
Vergleichen Sie Datums- und Uhrzeitobjekte:
(Ich habe 10 Tage ausgewählt - Alles, was älter als 10 Tage ist, ist "ALT", sonst "NEU")
quelle
Einige gegebene Antworten berücksichtigen den aktuellen Tag nicht!
Hier ist mein Vorschlag.
quelle
Wenn Sie Dinge mit Zeit und Datum tun, ist Carbon Ihr bester Freund.
Installieren Sie das Paket dann:
lt = kleiner als, gt = größer als
Wie in der Frage:
und vieles mehr;
quelle