web-dev-qa-db-de.com

Datum mit heute vergleichen

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?

188
alexus
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.

263
Tyler Carter

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.

189
Bobby Jack

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());
}
56
Alix Axel

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

}
45
kamakazuu

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.

40
Salman A
$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
12
Hassan

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

6
Nelu Bidonelu
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);

(das w3schools-Beispiel funktioniert perfekt)

5
Richard

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 .

3
isa

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!

2
enceladus

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');
}
1
Kevin

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;

0