PHP的当前时间大于时间戳给出错误的结果

时间:2018-08-29 14:52:32

标签: php timestamp

无法弄清楚为什么以下内容返回false:

$timestamp = '1535552942';
if (time() <= strtotime((int)$timestamp + 10))) // time() = 1535553866

当前时间大于时间戳+ 10秒!!!我已经检查了日志!

这怎么了?

2 个答案:

答案 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";
}