Ok, dopo giocherellare con questo per un po ', mi ritiro la soluzione con date('U')
e suggerisco di utilizzare questa invece:
function isValidTimeStamp($timestamp)
{
return ((string) (int) $timestamp === $timestamp)
&& ($timestamp <= PHP_INT_MAX)
&& ($timestamp >= ~PHP_INT_MAX);
}
Questo controllo sarà solo restituire true se la data $timestamp
è una stringae consiste esclusivamente di cifre e un carattere meno facoltativo. Il numero deve essere compreso nell'intervallo di bit di un numero intero (EDIT: actually unneeded as shown here).
var_dump(isValidTimeStamp(1) ); // false
var_dump(isValidTimeStamp('1') ); // TRUE
var_dump(isValidTimeStamp('1.0') ); // false
var_dump(isValidTimeStamp('1.1') ); // false
var_dump(isValidTimeStamp('0xFF') ); // false
var_dump(isValidTimeStamp('0123') ); // false
var_dump(isValidTimeStamp('01090') ); // false
var_dump(isValidTimeStamp('-1000000') ); // TRUE
var_dump(isValidTimeStamp('+1000000') ); // false
var_dump(isValidTimeStamp('2147483648') ); // false
var_dump(isValidTimeStamp('-2147483649')); // false
Il controllo per PHP_INT_MAX è assicurare che la stringa può essere utilizzato correttamente date
e simili, ad esempio assicura questo non accade *:
echo date('Y-m-d', '2147483648'); // 1901-12-13
echo date('Y-m-d', '-2147483649'); // 2038-01-19
Nei sistemi a 64 bit del numero intero è ovviamente maggiore di quello e la funzione non sarà più tornare false per "2147483648" e "-2.147,483649 millions", ma per i corrispondenti numeri più grandi .
(*) Nota: Io non sono sicuro al 100%, la gamma di bit corrisponde con quello che la data può usare anche se
dalla lettura del thread direi che la risposta breve è no. potresti essere in grado di controllare qualcosa che non è sicuramente valido ma valido, non sembra. – PurplePilot
Puoi aggiungere qualche spiegazione in più sul motivo per cui è necessario convalidare la stringa o cosa si intende fare con essa, una volta convalidata. – Gordon