无法弄清楚为什么以下内容返回false:
$timestamp = '1535552942';
if (time() <= strtotime((int)$timestamp + 10))) // time() = 1535553866
当前时间大于时间戳+ 10秒!!!我已经检查了日志!
这怎么了?
答案 0 :(得分:2)
引用docs:
strtotime
将任何英文文本日期时间描述解析为Unix时间戳
换句话说,您将英语中有意义的内容传递给该函数-并期望得到时间戳。
相反,您将时间戳传递给了函数,而strtotime
只是无法从函数中获得想要的东西。例如,此online demo显示int(31009790155)
是strtotime((int)$timestamp + 10))
的结果-将来会很遥远。
也许您是说要这样实现:
$timestamp = '1535552942';
if ( time() <= strtotime('+10 seconds', $timestamp) ) { ... }
...但是实际上我看不到为什么不能只将10(作为数字)加到时间戳上,然后直接将其与time()
进行比较。这些是数字,最后。
答案 1 :(得分:0)
根据PHP的官方网站,函数strtotime
的定义是......
strtotime
将任何英文文本日期时间描述解析为 Unix时间戳
此定义表示您可以提供仅英文文本日期时间。并且您正在为它提供一个整数,而此strtotime
正在寻找英文文本。
当您打印返回值strtotime
时,它将显示您当前的时间戳。
$timestamp = 'now';
echo strtotime($timestamp);
但是当您尝试使用整数参数打印其返回值时,则它什么也没有,如下所示...
$timestamp = 1535552942;
echo strtotime($timestamp);
因为此函数成功返回时间戳,否则返回false。
当您提供英文文本值并尝试在参数中添加一个时,它将生成警告...
$timestamp = 'now';
echo strtotime($timestamp+1);
警告:在
中遇到的非数字值
因为,根据PHP,对于使用无效字符串的算术会产生错误或警告。
无效时引入了新的E_WARNING和E_NOTICE错误 使用期望数字或它们的赋值等效的运算符来强制字符串。当字符串以数字开头但包含结尾时,将发出E_NOTICE 非数字字符,并且在字符串时发出E_WARNING 不包含数值。
以上给出的代码段满足此条件。
因此,现在只需将$ timestamp的值更改为“ now ”或任何其他有效的英文文本,然后从您的if条件中删除int
,即可正常使用。
$timestamp = "now";
if (time() <= strtotime($timestamp)){
echo "it works";
}