Ok, après avoir jouer avec ce pour un certain temps, j'ai retirer la solution avec date('U')
et suggèrent de l'utiliser à la place:
function isValidTimeStamp($timestamp)
{
return ((string) (int) $timestamp === $timestamp)
&& ($timestamp <= PHP_INT_MAX)
&& ($timestamp >= ~PHP_INT_MAX);
}
Cette case ne retourne true si l' $timestamp
est une chaîne et se compose uniquement de chiffres et une option de moins de caractère. Le nombre doit aussi être dans les bits de large d'un entier (EDIT: en fait inutiles, comme illustré ici).
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
La case à cocher pour PHP_INT_MAX est de s'assurer que votre chaîne peut être utilisée correctement en date
et les goûts, par exemple, il assure que cela n'arrive pas*:
echo date('Y-m-d', '2147483648'); // 1901-12-13
echo date('Y-m-d', '-2147483649'); // 2038-01-19
Sur les systèmes 64 bits de l'entier est bien sûr plus que cela et la fonction ne renvoie plus faux pour les "2147483648" et "-2147483649" mais pour le correspondant plus grand nombre.
(*) Note: je ne suis pas sûr à 100%, les bits de large correspond à quelle date pouvez utiliser si