网上以下面代码判断传入参数是否可以转换为时间戳,这种方法是不可取的。
$time = strtotime($time) !== false ? strtotime($time) : $time; // 这是错误方法
下面列出strtotime的返回值:有interger和boolean两种。
echo strtotime('2020-09-18 2:23:19'); // 1600395799
echo "\r\n";
echo strtotime('2020-09-18 2:23:20'); // 1600395799
echo "\r\n";
echo gettype(strtotime('2020-09-18 2:23:20')); // integer
echo "\r\n";
echo strtotime('1600367999'); // 190279468836
echo "\r\n";
echo strtotime('1600367000'); // 158754096036
echo "\r\n";
echo gettype(strtotime('1600367000')); // integer
echo "\r\n";
echo gettype(strtotime('abc')); // boolean
echo "\r\n";
因此我们可以通过以下方法判断是否可以转换为时间戳
$time = is_numeric($time) ? $time : strtotime($time);
另外附上对$time传参合法性判断
function checkDateTime($data)
{
return date('Y-m-d H:i:s', strtotime($data)) == $data ? true : false;
}
$date = '2020-09-19';
var_dump(checkDateTime($date)); // false
$date = '12:00:01';
var_dump(checkDateTime($date)); // false
$date = '2020-09-19 12:00:01';
var_dump(checkDateTime($date)); // true
$date = 'aaaa';
var_dump(checkDateTime($date)); // false
$date= '1600367999';
var_dump(checkDateTime($date)); // false