Ich habe folgendes
$var = "2010-01-21 00:00:00.0"
Ich möchte dieses Datum mit dem heutigen Datum vergleichen (d. H. Ich würde gerne wissen, ob dieser $var
vor heute oder gleich heute ist oder nicht)
Welche Funktion muss ich verwenden?
strtotime($var);
Wandelt es in einen Zeitwert um
time() - strtotime($var);
Gibt Ihnen die Sekunden seit $var
if((time()-(60*60*24)) < strtotime($var))
Überprüft, ob $var
am letzten Tag war.
Dieses Format ist für einen Standard-Zeichenkettenvergleich, z.
if (date1 > date2)
Um das heutige Datum in diesem Format zu erhalten, verwenden Sie einfach: date("Y-m-d H:i:s")
.
So:
$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";
if ($date < $today) {
Das ist das Schöne an diesem Format: es ordnet gut an. Natürlich ist das may weniger effizient, abhängig von Ihren genauen Umständen, aber es könnte auch viel bequemer sein und zu mehr wartbaren Code führen Anruf.
Für die richtige Zeitzone können Sie beispielsweise
date_default_timezone_set('America/New_York');
Klicken Sie hier , um auf die verfügbaren PHP Zeitzonen zu verweisen.
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());
}
Um BoBby Jack abzuschließen, die Verwendung des DateTime-Objekts, wenn Sie PHP 5.2.2 oder höher verwenden:
if(new DateTime() > new DateTime($var)){
// $var is before today so use it
}
Sie können die DateTime
-Klasse verwenden:
$past = new DateTime("2010-01-01 00:00:00");
$now = new DateTime();
$future = new DateTime("2020-01-01 00:00:00");
Vergleichsoperatoren arbeiten *:
var_dump($past < $now); // bool(true)
var_dump($future < $now); // bool(false)
var_dump($now == $past); // bool(false)
var_dump($now == new DateTime()); // bool(true)
var_dump($now == $future); // bool(false)
var_dump($past > $now); // bool(false)
var_dump($future > $now); // bool(true)
Es ist auch möglich, die Zeitstempelwerte von DateTime-Objekten abzurufen und sie zu vergleichen:
var_dump($past ->getTimestamp()); // int(1262286000)
var_dump($now ->getTimestamp()); // int(1431686228)
var_dump($future->getTimestamp()); // int(1577818800)
var_dump($past ->getTimestamp() < $now->getTimestamp()); // bool(true)
var_dump($future->getTimestamp() > $now->getTimestamp()); // bool(true)
* Beachten Sie, dass ===
den Wert false zurückgibt, wenn zwei verschiedene DateTime-Objekte verglichen werden, auch wenn sie dasselbe Datum darstellen.
$toBeComparedDate = '2014-08-12';
$today = (new DateTime())->format('Y-m-d'); //use format whatever you are using
$expiry = (new DateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today) > strtotime($expiry)); //false or true
Einige Jahre später bin ich die zweite Beobachtung von Bobby Jack, dass die letzten 24 Stunden nicht heute sind !!! Und ich bin überrascht, dass die Antwort so viel zugesagt hat ...
Um zu vergleichen, ob ein bestimmtes Datum kleiner, gleich oder größer als ein anderes ist, müssen Sie sie zunächst bis zum Beginn des Tages "runterdrehen". Mit anderen Worten, stellen Sie sicher, dass Sie in beiden Terminen über dieselbe Uhrzeit (00:00:00) sprechen ... Dies kann auf einfache und elegante Weise erfolgen:
strtotime("today") <=> strtotime($var)
if $var
hat den Zeitteil auf 00:00:00 wie das angegebene OP.
Ersetzen Sie <=>
durch das, was Sie benötigen (oder halten Sie es in php 7 so)
Natürlich sprechen wir für beide über dieselbe Zeitzone. Für Liste der unterstützten Zeitzonen
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
(das w3schools-Beispiel funktioniert perfekt)
Eine auf meiner Erfahrung beruhende Warnung, wenn Ihr Zweck nur ein Datum umfasst, geben Sie bitte den Zeitstempel an. Beispiel: Heute ist "2016-11-09"
. Ein Vergleich mit Zeitstempel macht die Logik hier zunichte. Beispiel,
// input
$var = "2016-11-09 00:00:00.0";
// check if date is today or in the future
if ( 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, an dem Sie vergleichen möchten, ist der obige Code nicht die richtige Logik. Warum? Denn time () und strtotime () enthalten timestamp. Das heißt, obwohl beide Termine auf denselben Tag fallen, aber der Zeitunterschied wird ausschlaggebend sein. Betrachten Sie das Beispiel unten:
// plain date string
$input = "2016-11-09";
Da es sich bei der Eingabe um eine einfache Datumszeichenfolge handelt, wird bei Verwendung von strtotime()
für $input
angenommen, dass es Mitternacht von 2016-11-09 ist. Wenn Sie time()
jederzeit nach Mitternacht ausführen, wird $input
immer als vergangen betrachtet, auch wenn sie am selben Tag sind.
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.";
}
Ein anderes nützliches Beispiel kann die einfache Klasse PHP sein.
Es bietet viele Methoden sowie Vergleichsfunktionen.
zum Beispiel:
$date = new simpleDate();
echo $date->now()->compare('2010-01-21 00:00:00')->isBefore();
Es gibt auch viele Beispiele auf der Tutorial-Seite. Bitte klicken Sie hier .
Auf Josuas Antwort von w3schools eingehen:
//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 dates
if ($intDiff > 0) {echo '$date1 is in the past';}
else {echo 'date1 is today or in the future';}
Ich hoffe das hilft. Mein erster Post auf stackoverflow!
Datumszeitobjekte vergleichen:
(Ich habe 10 Tage ausgewählt - Alles, was älter als 10 Tage ist, ist "ALT", sonst "NEU".)
$now = new DateTime();
$diff=date_diff($yourdate,$now);
$diff_days = $diff->format("%a");
if($diff_days > 10){
echo "OLD! " . $yourdate->format('m/d/Y');
}else{
echo "NEW! " . $yourdate->format('m/d/Y');
}
Wenn du Dinge mit Zeit und Datum tust Carbon bist du der beste Freund;
Installieren Sie das Paket dann:
$theDay = Carbon::make("2010-01-21 00:00:00.0");
$theDay->isToday();
$theDay->isPast();
$theDay->isFuture();
if($theDay->lt(Carbon::today()) || $theDay->gt(Carbon::today()))
lt = kleiner als, gt = größer als
Wie in der Frage:
$theDay->gt(Carbon::today()) ? true : false;
und vieles mehr;