比较日期时的strtotime逻辑错误

时间:2014-07-03 14:21:55

标签: php

我在比较两个日期时遇到了问题。我知道这听起来有点傻但我希望你们都尝试这个例子。

$a = date('d-m-Y', strtotime('2014-07-03'));
$b = date('d-m-Y', strtotime('2014-03-17'));
$c = date('d-m-Y', strtotime('2015-03-16'));

if(($a > $b)  && ($a < $c) ) {
    echo "1";
}
else {
    echo "2";
}

为什么结果是2?

3 个答案:

答案 0 :(得分:14)

你的“逻辑”是错误的。

xkcd
&GT; xkcd

$a = '2014-07-03';
$b = '2014-03-17';
$c = '2015-03-16';

if(($a > $b) && ($a < $c)) {
    echo "1"; // it works!
}

Big-endian格式非常棒。

答案 1 :(得分:4)

因为您的日期格式 不适合比较。在比较日期时(或使用DateTime()对象),始终使用YYYY-MM-DD格式。这是因为04-01-2014小于05-01-2014,当时比较为字符串。

$a = '2014-07-03';
$b = '2014-03-17';  
$c = '2015-03-16';  

if(($a > $b)  && ($a < $c) ) {
    echo "1";
}
else {
    echo "2";
}

或者在使用DateTime()对象时:

$a = new DateTime('2014-07-03');
$b = new DateTime('2014-03-17');
$c = new DateTime('2015-03-16');

if(($a > $b)  && ($a < $c) ) {
    echo "1";
}
else {
    echo "2";
}

答案 2 :(得分:0)

在你的日期/ strtotime功能之后,你有:

$a = '03-07-2014'
$b = '17-03-2014'
$c = '16-03-2015'

所以当你比较时,$ a小于$ b,因为它比较了第一天。