2017-01-04 3 views
0

Die Verwendung von logischen Operatoren mit PHP-Daten funktioniert nicht vollständig korrekt. Es kann ausrechnen, dass 2016 vor 2017 liegt, kann aber nicht feststellen, dass der 1. vor dem 4. im aktuellen Monat liegt.PHP-Daten nicht ganz funktioniert

Ich habe diese Art von Fehler seit einiger Zeit bemerkt: Wie kann man es am besten beheben und vermeiden?

$date_extra_early = date("2017-01-1 07:30:00"); 
$today = date("Y-m-d H:i:s"); 
var_dump($today); 
var_dump($date_extra_early); 
if ($today>$date_extra_early) 
        echo("today is greater than date extra early\n"); 
else echo("today is less than date extra early\n"); 

Ausgänge

string (19) "2017.01.04 14.50.32" string (18) "2017.01.01 07.30.00" Heute weniger als extra früh

+1

Haben Sie versucht, es mit einem richtigen Datetime-Wert als Eingabe? '$ date_extra_early = date (" 2017-01-01 07:30:00 ");' – feeela

+0

@feeela Okay, die führende Null hat diese logische Anweisung funktioniert, aber das ist kein bloßer Tippfehler. Ich habe eine wirklich flockige Zuverlässigkeit von Daten bemerkt. Ich habe mich mal darauf verlassen und es ist katastrophal auseinandergefallen. Sie fragen sich, ob es einen Weg gibt zu garantieren, dass es wie vorgesehen funktioniert. – Stumbler

+0

kann momentan nicht testen, aber versuchen Sie 'if (strtotime (" $ today ")> strtotime (" $ date_extra_early ")) ...' –

Antwort

3

Sie können DateTime-Objekte zugunsten von Strings vergleichen (letztere werden von date() zurückgegeben). Logische Operationen wie ==, <, >, <=, >= funktionieren wie Charme mit DateTime-Objekten. Außerdem versteht der DateTime-Konstruktor viele verschiedene Eingabeformate und hätte auch bei der fehlerhaften Eingabe geholfen.

$earlydate = new DateTime('2017-01-1 07:30:00'); 
$today = new DateTime('now'); 

if($today > $earlydate) 
    echo 'today is greater than date extra early'; 
else 
    echo 'today is less than date extra early'; 

Siehe auch: http://php.net/manual/en/class.datetime.php

+0

Was ist der Unterschied zwischen Datum und Datetime? – Stumbler

+4

Dies ist die Zeit, zu der Sie sich überlegen sollten, "Ich sollte das Handbuch konsultieren". –

1

Sie müssen Datum angeben, in der richtigen datetime Format

$date_extra_early = date("2017-01-01 07:30:00"); 
           //^missing a leading 0 here 

demo

Oder könnten Sie Ihr Datum verdeckte nach integer und vergleichen Sie die

if (strtotime($today)>strtotime($date_extra_early)) { 
    echo("today is greater than date extra early\n"); 
} else { 
    echo("today is less than date extra early\n"); 
} 

In beiden Fällen druckt es

heute größer ist als Datum

extra früh ist

demo

+0

Das ist nicht korrekt, der erste Parameter für die Funktion 'date()' ist eine Formatzeichenfolge. Ohne Formatierungszeichen macht die Funktion nichts, sie gibt nur die Eingabe aus. – jeroen

1

Sie in der Tat das richtige Format für das Datum verwenden müssen(). In diesem Fall, dass Sie die führenden 0 vor dem 1 (Tag) fehlen

$date_extra_early = date("2017-01-01 07:30:00"); 
$today = date("Y-m-d H:i:s"); 
var_dump($today); 
var_dump($date_extra_early); 
if ($today>$date_extra_early) 
    echo("today is greater than date extra early\n"); 
else 
    echo("today is less than date extra early\n"); 

Ausgänge:

string '2017-01-04 22:00:57' (length=19) 
string '2017-01-01 07:30:00' (length=19) 
today is greater than date extra early 
Verwandte Themen