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

我通过谷歌找到了this thread个,但恐怕没有一个非常可靠的答案.(是的,我在前面提到的帖子上抄袭了原始海报上的问题).

推荐答案

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

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

仅当给定的$timestampstring且仅由数字和可选减号组成时,此判断才会返回true.数字还必须在整数(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

对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,而是返回相应的较大数字.


(*)Note: I'm not 100% sure, the bit range corresponds with what date can use though

Php相关问答推荐

Symfony装置加载:try 从命名空间加载类";ClassUtils";Doctrine\Common\Util";

如何修复条带元素中的错误&&客户端_机密&

有没有办法为整个PHP应用程序启用严格类型

不包括WooCommerce中单独销售的产品

如何实现对数据库表中多列的唯一约束?

列出所有WooCommerce处理订单中的产品数量,SKU和品牌

Codeigniter 3中SMTP.office 365.com的截断问题

CKEDITOR-如何在PHP中判断提交后的空数据

fpm-php + nginx + POST数据

Rappasoft Datatables V2(我想在另一个表具有相同值列时显示数据)

除WooCommerce中的特定国家/地区外,有条件地要求填写邮政编码 checkout 字段

在WooCommercel邮箱通知上添加来自Apaczka插件的选定交付点

Google Drive API 服务->文件->get('root') 失败并显示找不到文件. (范围问题?)

Shopware 6.4.20店铺激活问题

Laravel Docker 几个数据库

laravel 中的 OrderBy json 列

如何使用先前 SELECT 的结果来 SELECT SQL 数据

PHP路由不重定向

我应该清理 WP 查询中的 $_POST 吗?

在 PHP 中用单个逗号删除多个逗号