php strtotime()值未按预期工作

时间:2015-01-20 22:58:13

标签: php date strtotime

这段代码一直告诉我$ lasUpdate总是大于$昨天,无论我对$昨天结果的变化是什么(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';

3 个答案:

答案 0 :(得分:2)

你已成为PHP类型玩杂耍的受害者。 date函数的返回值为字符串。你不能比较字符串格式的日期,因为PHP会在比较的上下文中将字符串变成整数。唯一的例外是字符串是有效数字。从本质上讲,你在做:

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

哪种PHP类型适用于:

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

并在第一个实例上返回false,在第二个实例上返回true

您的解决方案是不将date包裹在strtotime函数周围,只使用strtotime函数本身返回的时间戳来直接比较UNIX时间戳:

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

但是,当您将date返回给用户时,您会想要使用echo,这样他们就可以使用有意义的日期字符串。

答案 1 :(得分:0)

尝试这样的事情:

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

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

答案 2 :(得分:-1)

  

12/31/14大于01/19/15

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

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