2015-09-23 8 views
7

Nach einigem Herumspielen mit strtotime() in PHP habe ich festgestellt, dass es einen gültigen Zeitstempel zurückgibt, wenn man Leerzeichen und/oder Punkte eingibt.Warum geben strtotime ('') und strtotime ('.') Einen Zeitstempel zurück?

var_dump(strtotime(" ")); 
var_dump(strtotime(".")); 
var_dump(strtotime(". .. .. .. .... .. . .. .")); 

produziert:

int 1443009652 
int 1443009652 
int 1443009652 

Warum sehen PHP diese als gültig?

+0

Sie übergeben in Strings .... was würden Sie erwarten, dass es zurückkehrt? –

+0

Wahrscheinlich, weil es versucht, so viele mögliche Strings wie "nächsten Donnerstag", "+3 Tage", "jetzt", "ersten Dienstag des letzten Monats", "23. September 2015" usw. zu parsen, dass es einfach auf das aktuelle Datum/Zeit, wenn es den String nicht sinnvoll machen kann, anstatt einen Fehler zu schreiben, um –

+0

auszugeben Hey, es funktioniert auch mit Kommas! – Amarnasan

Antwort

2

Die einfachste Antwort ist einige von ihnen sind false y

var_dump(DateTime(false)); // date shown is current time 

Meine Wette ist, dass der Parser (die eine Vielzahl von akzeptablen Eingaben zu bereinigen versucht) streift die Perioden aus (die nicht zu sein werden als Trennzeichen verwendet), wobei nur eine leere Zeichenfolge übrig bleibt. Es ist die einzige Erklärung, die Sinn ergibt.

echo strtotime('1.1.2000'); // outputs 946681200 
+1

Dies ist wahrscheinlich der Fall. Ich würde erwarten, dass 'strtotime ('')' und 'strtotime ('')' die gleiche Ausgabe geben würden, aber sie nicht. Ich werde einen Fehler einreichen und sehen, ob sie dieses Verhalten klären können. – JurrieG

+0

In welcher Version echo strtotime (false); 'den Zeitstempel zurückgeben? Ich teste hier und bin falsch. php5.6.8 – rray

+0

@rray bah, ich lief das gegen 'DateTime'. Mein Fehler. https://3v4l.org/6DGdK – Machavity