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 天,因为它应该显示已过期。谁能指出我做错了什么。

4

3 回答 3

2

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

xkcd

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

于 2013-03-03T04:11:22.113 回答
2

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

改成

if($val_1 < $val_2 && $day == 0)
    $output.=' Almost Over';
if($val_1 > $val_2)
    $output.= ' Expired';
return $output;
于 2013-03-03T04:17:48.740 回答
1

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

它可以在 YDM 中显示,如果你觉得有点花哨,你甚至可以做一个倒计时时钟。

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

希望它有帮助!

于 2013-03-03T04:09:17.477 回答