Ok, después de tocar el violín con esto desde hace algún tiempo, me retiro de la solución con date('U')
y mejor utilizar éste en su lugar:
function isValidTimeStamp($timestamp)
{
return ((string) (int) $timestamp === $timestamp)
&& ($timestamp <= PHP_INT_MAX)
&& ($timestamp >= ~PHP_INT_MAX);
}
Esta comprobación sólo devolverá verdadero si el dado $timestamp
es una cadenay consiste únicamente en dígitos y un carácter negativo opcional. El número también debe estar dentro del rango de bits de un número entero (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
El cheque por PHP_INT_MAX es asegurar que la cadena puede ser utilizado correctamente por date
y los gustos, por ejemplo, asegura que esto no suceda *:
echo date('Y-m-d', '2147483648'); // 1901-12-13
echo date('Y-m-d', '-2147483649'); // 2038-01-19
En sistemas de 64 bits del entero es por supuesto más grande que eso y la función ya no volverá falsa para "2147483648" y "-2147483649" pero para los grandes números correspondientes .
(*) Nota: No estoy seguro al 100%, el rango de bit corresponde con qué fecha se puede utilizar aunque
desde leer el hilo, diría que la respuesta corta es no. Es muy posible que pueda verificar algo que definitivamente no es válido pero que es válido, no lo parece. – PurplePilot
¿Puede agregar alguna explicación adicional sobre por qué necesita validar la cadena o qué está planeando hacer con ella, una vez que se haya validado? – Gordon