显示错误值的日期差异

时间:2013-03-03 03:50:08

标签: php date

我使用了一个函数来计算2个日期之间的日期差异。

这是我的功能

function date_difference ($date_1, $date_2) {   


    $val_1 = new DateTime($date_1);
    $val_2 = new DateTime($date_2);

    $interval = $val_1->diff($val_2);
    $year     = $interval->y;
    $month    = $interval->m;
    $day      = $interval->d;

    $output   = '';

    if($year > 0){
        if ($year > 1){
            $output .= $year." years ";     
        } else {
            $output .= $year." year ";
        }
    }

    if($month > 0){
        if ($month > 1){
            $output .= $month." months ";       
        } else {
            $output .= $month." month ";
        }
    }

    if($day > 0){
        if ($day > 1){
            $output .= $day." days ";       
        } else {
            $output .= $day." day ";
        }
    }
    if($day == 0)
        $output.=' Almost Over';
    if($day < 0)
        $output.= ' Expired';
    return $output;
}

我正在使用它

echo date_difference(date('m/d/Y'),'02/06/2013');

它显示结果为25天,因为它应显示已过期。任何人都可以指出我做错了。

3 个答案:

答案 0 :(得分:2)

当我看到这个XKCD页面时,我希望有机会发布它,就在这里!

xkcd

当您的代码尝试解析02/06/2013时,它如何知道您的意思是&#34; 2月2日&#34;或&#34; 6月6日&#34;?在给出解析日期时,您应始终使用YYYY-MM-DD格式,或者更好地硬编码实际数字时间戳(在本例中为1360126800)

答案 1 :(得分:2)

DateInterval不会有负值,您需要比较两个DateTime对象。

更改为

if($val_1 < $val_2 && $day == 0)
    $output.=' Almost Over';
if($val_1 > $val_2)
    $output.= ' Expired';
return $output;

答案 2 :(得分:1)

只需使用UNIX时间戳,这样就应该很容易计算。

它可以在Y-D-M中显示,如果你觉得有点花哨,你甚至可以制作一个倒计时钟。

大多数MMO和管理系统使用它来注册日期&amp;注册时间并显示该成员在社区中的时间。

希望它有所帮助!