2015-09-23 17 views
7

Dopo aver fatto un po 'di roba con strtotime() in PHP ho notato che restituisce un timestamp valido quando si passa in spazi e punti.Perché strtotime ('') e strtotime ('.') Restituiscono un timestamp?

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

produce:

int 1443009652 
int 1443009652 
int 1443009652 

Perché PHP vedono questo come valida?

+0

Stai trasmettendo stringhe .... cosa ti aspetti che ritorni? –

+0

Probabilmente perché tenta di analizzare molte stringhe potenziali come "giovedì prossimo", "+3 giorni", "ora", "primo martedì del mese scorso", "23 settembre 2015", ecc. Che semplicemente imposta la data corrente/tempo se non può dare un senso alla stringa, piuttosto scrivendo un errore all'output –

+0

Ehi, funziona anche con le virgole! – Amarnasan

risposta

2

La risposta più semplice è alcuni di loro sono false y

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

mia scommessa è che il parser (che sta cercando di ripulire una vasta gamma di ingressi accettabili) elementi periodi fuori (che non vengono usato come delimitatore), lasciando solo una stringa vuota. È l'unica spiegazione che ha senso.

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

Questo è probabilmente il caso. Mi aspetterei che 'strtotime ('')' e 'strtotime ('')' diano lo stesso risultato, ma non lo fanno. Scriverò un bug e vedrò se possono chiarire questo comportamento. – JurrieG

+0

In quale versione 'echo strtotime (false);' restituisce il timestamp? ho provato qui e ho sbagliato. php5.6.8 – rray

+0

@rray bah, l'ho eseguito contro 'DateTime'. Colpa mia. https://3v4l.org/6DGdK – Machavity

Problemi correlati