3

我正在尝试编写一个 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,这是错误的。

关于如何克服这个问题有什么想法吗?

4

5 回答 5

2

试试这个:

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

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

编辑:
准确地说 - 评估它1或者0你可以做

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

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

$date1 > $date2

那么是真的

$date1->diff($date2)

是负数(简而言之)。

于 2013-09-24T20:55:46.140 回答
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)

演示!

于 2013-09-24T20:50:47.977 回答
0

我想你想要过去的天数。如果是这样,请使用:

$interval = $date1->diff($date2)->days;
于 2013-09-24T20:49:00.743 回答
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;
}
于 2013-09-24T20:50:44.953 回答
-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;
    }
}
于 2013-09-24T20:50:04.247 回答