这段代码一直告诉我$ 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';
答案 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
。
或者将您正在制作的时间戳存储在不同的变量中并进行比较。