一尘不染

检查字符串是否为unix时间戳

php

我有一个字符串,我需要找出它是否是unix时间戳,如何才能有效地做到这一点?

我通过Google找到了这个线程,但恐怕并没有一个非常可靠的答案。(是的,我在前面提到的帖子中抄写了原始海报上的问题)。


阅读 645

收藏
2020-05-29

共1个答案

一尘不染

好吧,在摆弄了一段时间之后,我撤回了解决方案,date('U')建议改用此解决方案:

function isValidTimeStamp($timestamp)
{
    return ((string) (int) $timestamp === $timestamp) 
        && ($timestamp <= PHP_INT_MAX)
        && ($timestamp >= ~PHP_INT_MAX);
}

如果给定的$timestamp字符串 并且仅由数字和可选的减号组成,则此检查将仅返回true 。

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%,虽然位范围与可以使用的日期相对应

2020-05-29