$ var是有效的unix时间戳

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时间戳的最佳方法是什么?

Pek*_*ica 5

这里,第一个应该是TRUE,第二个应该是FALSE

为什么?20101108是一个有效的UNIX时间戳, - 正如你所说,它是1970年8月21日.例如,很可能是一个人的生日.

实现你想要的唯一方法是设置一个日期范围,标记你正在使用的定义的"理智"时间戳 - 例如2000年1月1日之后的任何事情 - 并对其进行检查.


mil*_*sky 5

当时间戳大于整数大小时,可以使用正则表达式检查 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)