减去日期以获得天数

时间:2013-09-24 20:39:00

标签: php date

我正在尝试编写一个PHP代码,它可以减去两个日期并获得两个日期之间的天数。我想出的代码如下所示

<?php
$c_date = date("Y-m-d");
//Subtracting two dates.
$date1 = new DateTime($d_date); //$d_date gets its value from database which i havent shown here
$date2 = new DateTime($c_date);
$interval = $date1->diff($date2);
echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days ";
?>

现在上面的代码有效,但我无法使用它来满足我的需求。我需要能够确定交货日期($ d_date)是否在距离当前日期的5天内,如果是这种情况则返回值1。

因此,如果$c_date = "2013-09-24"$d_date = "2013-09-30",那么我将返回1。 但问题是,当交货日期是“2013-09-19”时,交货日期已经过去了,我应该返回0,但是使用当前代码,当天的差异仍然是5,所以我将返回1这是错的。

有任何关于如何克服这个问题的想法吗?

5 个答案:

答案 0 :(得分:2)

试试这个:

$interval = $date2->diff($date1);
$returnValue = $interval->d <= 5 && !$interval->invert;

$returnValue将为truefalse(布尔类型)。

修改
确切地说 - 要将其评估为10,您可以

$returnValue = (int) ($interval->d <= 5 && !$interval->invert);

编辑#2:
$interval->invert是告知您$date2$date1之间的差异是负(1)还是正(0)的属性。令人困惑的是 - diff方法中的计算始终是第二个对象(方法参数)减去第一个对象(方法被调用者)所以如果假设

$date1 > $date2

是真的那么

$date1->diff($date2)

是否定的(在快捷方式中)。

答案 1 :(得分:1)

您可以比较两个日期时间对象,并检查交货日期是否大于当前日期并相应地进行。

作为一项功能:

function check_date($d_date, $c_date)
{
    if($d_date > $c_date) {
        $date1 = new DateTime($d_date); //$d_date gets its value from database which i havent shown here
        $date2 = new DateTime($c_date);
        $interval = $date1->diff($date2);
        return "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days ";
    }
    else {
        return false;
    }

}

测试用例

var_dump( check_date('2013-09-30', '2013-09-24') );
var_dump( check_date('2013-09-19', '2013-09-24') ); 

输出:

string(37) "difference 0 years, 0 months, 6 days "
bool(false)

Demo!

答案 2 :(得分:0)

我想你想要过去的天数。如果是这样的话:

$interval = $date1->diff($date2)->days;

答案 3 :(得分:0)

好的,所以这里是必需的代码,正如Maximus2012建议的那样,使用if语句来比较首先完成工作的日期。所以这是代码

$date1 = new DateTime($ddate[$counter]);
                $date2 = new DateTime($c_date);
                if($date2>$date1)
                {
                    $stat = 0;
                }
$interval = $date1->diff($date2);
                $d_diff = $interval->d;
if($d_diff>5)
{
$stat = 0;
}

答案 4 :(得分:-1)

试试这个:D

function dateInterval($current, $delivery, $days){
    $unixCurrent = strtotime($current);
    $unixDelivery = strtotime($delivery);
    if ($unixCurrent === false || $unixDelivery === false){
        return -2;
    }
    if ($unixCurrent > $unixDelivery){
        return -1;
    } else if ($unixCurrent+($days*86400) > $unixDelivery){
        return 1;
    } else {
        return 0;
    }
}