Php 显示错误值的日期差

Php 显示错误值的日期差,php,date,Php,Date,我使用了一个函数来计算两个日期之间的日期差 这是我的功能 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 = $interv

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

这是我的功能

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;
}

它将结果显示为25天,其中应显示已过期。谁能指出我哪里做错了。

只需使用UNIX时间戳,这样它应该是一个非常简单的计算

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

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


希望有帮助

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


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

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

改为

if($val_1 < $val_2 && $day == 0)
    $output.=' Almost Over';
if($val_1 > $val_2)
    $output.= ' Expired';
return $output;
if($val_1<$val_2&&$day==0)
$output.='几乎结束';
如果($val_1>val_2)
$output.='Expired';
返回$output;

你试过另一种方法吗?我找到了。是的,我没有编写函数,只是修改了它,让它按照我想要的方式工作。这只是一件个人的小事,但我会使用三元运算符,而不是
$[timelength]>1
if语句,因为它会更干净。好的,谢谢,我会这样做。像这样尝试过,但仍然显示25天<代码>回波时差(日期('Y-m-d'),'2013-02-06')您需要检查
是否($interval['invert'])返回“Expired'致命错误:无法在第87行的/home/crowdfun/public_html/wp content/themes/vantage child/functions.php中将DateInterval类型的对象用作数组,它应该是
$interval->invert
。是的,谢谢你的工作,但是为什么我需要
返回'Expired'
我不能将它附加到
$output
?已经尝试过了,但是它给出了2个月30天的回波时间差(日期('Y-d-m'),'2013-06-02')那么简单地说,你希望代码减去1,直到值为25,然后返回“过期”,我理解正确吗?是的。如果两个日期之间的差异小于0,则它应返回expiredThat,这也不起作用。我已经过期25天了。几乎在过去的一段时间里,我都是一片空白。我想我可以修改你的代码,让它正常工作。几乎超过显示正确的结果为我。所以只有过期的才需要修改。我确实喜欢这个<代码>如果($val_1>$val_2)返回“过期”
if($val_1 < $val_2 && $day == 0)
    $output.=' Almost Over';
if($val_1 > $val_2)
    $output.= ' Expired';
return $output;