检查字符串是否为 Unix 时间戳
2022-08-30 08:21:41
我有一个字符串,我需要找出它是否是Unix时间戳,我该如何有效地做到这一点?
我通过Google找到了这个帖子,但恐怕它没有得出一个非常可靠的答案。(是的,我在上述线程上从原始海报中抄写了这个问题)。
我有一个字符串,我需要找出它是否是Unix时间戳,我该如何有效地做到这一点?
我通过Google找到了这个帖子,但恐怕它没有得出一个非常可靠的答案。(是的,我在上述线程上从原始海报中抄写了这个问题)。
好吧,在摆弄了一段时间之后,我撤回了解决方案,并建议改用这个解决方案:date('U')
function isValidTimeStamp($timestamp)
{
return ((string) (int) $timestamp === $timestamp)
&& ($timestamp <= PHP_INT_MAX)
&& ($timestamp >= ~PHP_INT_MAX);
}
仅当给定的是字符串并且仅由数字和可选的减号字符组成时,此检查才会返回 true。该数字还必须在整数的位范围内(编辑:实际上不需要,如下所示)。$timestamp
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
检查PHP_INT_MAX是为了确保您的字符串可以被等正确使用,例如,它确保这种情况不会发生*:date
echo date('Y-m-d', '2147483648'); // 1901-12-13
echo date('Y-m-d', '-2147483649'); // 2038-01-19
在64位系统上,整数当然大于此值,并且该函数将不再为“2147483648”和“-2147483649”返回false,而是为相应的较大数字返回false。
(*) 注意:我不是100%确定,位范围对应于可以使用的日期
由于 unix 时间戳是整数,请使用 is_int())。然而,由于()不适用于字符串,我们检查它是否是数字,并且它的intergal形式与其原始形式相同。例:is_int
( is_numeric($stamp) && (int)$stamp == $stamp )