mjs*_*lva 4 php validation timestamp
我需要一个函数来验证变量的内容是否是有效的unix时间戳.
我已经检查了这个线程:检查字符串是否是一个unix时间戳,但问题是最多投票的答案中的函数仍然会导致一些错误,例如:
function is_timestamp($timestamp)
{
return ((string) (int) $timestamp === $timestamp)
&& ($timestamp <= PHP_INT_MAX)
&& ($timestamp >= ~PHP_INT_MAX);
}
// Some tests:
$timestamp = 1289216307;
var_dump(is_timestamp($timestamp));
var_dump(date('Y-m-d', $timestamp));
// result
bool(false)
string(10) "2010-11-08"
$timestamp = '20101108';
var_dump(is_timestamp($timestamp));
var_dump(date('Y-m-d', $timestamp));
// result
bool(true)
string(10) "1970-08-21"
Run Code Online (Sandbox Code Playgroud)
在这里,第一个应该是TRUE而第二个应该是FALSE所以,测试a $var是否是真正有效的unix时间戳的最佳方法是什么?
这里,第一个应该是TRUE,第二个应该是FALSE
为什么?20101108是一个有效的UNIX时间戳, - 正如你所说,它是1970年8月21日.例如,很可能是一个人的生日.
实现你想要的唯一方法是设置一个日期范围,标记你正在使用的定义的"理智"时间戳 - 例如2000年1月1日之后的任何事情 - 并对其进行检查.
当时间戳大于整数大小时,可以使用正则表达式检查 unix 时间戳格式:
/**
* Check if timestamp is in unix format.
*
* @param string $timestamp
* Target timestamp that will be checked.
*
* @return bool
* TRUE if timestamp is in unix format. FALSE on failure.
*/
function is_unix_timestamp($timestamp) {
return preg_match('/^\d+$/', $timestamp);
}
Run Code Online (Sandbox Code Playgroud)