php strtotime() 值未按预期工作

php strtotime() values not working as expected

此代码一直告诉我 $lasUpdate 总是大于 $yesterday,无论我对 $yesterday 结果所做的更改是什么(12/31/14 大于 01/19/15,无需更新)。我觉得我错过了一些简单的东西提前谢谢你非常感谢。

$result['MAX(Date)']='12/31/14';
$lastUpdate = date('m/d/y', strtotime($result['MAX(Date)']));
$yesterday = date('m/d/y', strtotime('-1 day'));

if($lastUpdate<$yesterday){echo $lastUpdate.'is less '.$yesterday.'<br>'.'update needed';}
if($lastUpdate>=$yesterday){echo $lastUpdate.'is greater than '.$yesterday.'<br>'.'no update needed';

12/31/14 is greater than 01/19/15

因为1大于0。如果您想以这种方式比较日期,则需要以不同的格式(从最高有效数字到最低有效数字)存储它们,例如 Ymd.

或者将您制作的时间戳存储在不同的变量中并进行比较。

您已成为 PHP 类型字符串的牺牲品。 date 函数具有字符串的 return 值。您 不能 比较字符串格式的日期,因为 PHP 会在比较的上下文中将字符串转换为整数。唯一的例外是字符串是否为有效数字。本质上,你在做:

if ('12/31/14' < '01/19/15') { ... }
if ('12/31/14' >= '01/19/15') { ... }

哪个 PHP 类型变戏法:

if (12 < 1) { ... }
if (12 >= 1) { ... }

和 returns false 在第一个实例中,true 在第二个实例中。

您的解决方案是不将 date 包装在 strtotime 函数周围,而仅使用 strtotime 函数本身的 returned 时间戳直接比较 UNIX 时间戳:

$lastUpdate = strtotime($result['MAX(Date)']);
$yesterday = strtotime('-1 day');

然而,当您将 echo 返回给用户时,您将希望使用 date,以便他们可以使用有意义的日期字符串。

尝试这样的事情:

$lastUpdate = strtotime($result['MAX(Date)']);
$yesterday = strtotime('-1 day');

if ($lastUpdate < $yesterday) { /* do Something */ }