PHP DateTime diff格式返回-0

时间:2017-02-16 11:25:27

标签: php datetime datediff

如果当前日期和另一个日期之间的差异低于x天,我创建了一个返回true的函数。

这是我的功能:

private function notBeforeDate($date_to_compare, $interval) {
    $now = new DateTime('now');
    $date = new DateTime($date_to_compare);
    $diff = $now->diff($date)->format("%r%a");

    return $diff < $interval ? true : false;
}

但是当我发送相同的日期时$diff将返回-0,而第+1天将返回0.

E.g(假​​设当前日期为2017-02-16):

$this->notBeforeDate('2017-02-15', 1); // $diff = -1
$this->notBeforeDate('2017-02-16', 1); // $diff = -0
$this->notBeforeDate('2017-02-17', 1); // $diff = 0
$this->notBeforeDate('2017-02-18', 1); // $diff = 1

如何才能在$diff变量中获得良好的价值?我想要这个:

$this->notBeforeDate('2017-02-15', 1); // $diff = -1
$this->notBeforeDate('2017-02-16', 1); // $diff = 0
$this->notBeforeDate('2017-02-17', 1); // $diff = 1
$this->notBeforeDate('2017-02-18', 1); // $diff = 2

2 个答案:

答案 0 :(得分:1)

DateTime("now")将返回日期和时间。只要时间戳在任何一个方向上都小于24小时,在任何时间“任何时间”的“现在”将从任何相同或下一个日期起不到一天。

对你来说,一个简短的问题就是:

private function notBeforeDate($date_to_compare, $interval) {
    $now = new DateTime(Date("Y-m-d"));
    $date = new DateTime($date_to_compare);
    $diff = $now->diff($date)->format("%r%a");

    return $diff < $interval ? true : false;
}

在这种情况下,时间部分将从“now”中删除。更好的解决方案是创建一个只使用日期而不是时间的解决方案。

实施例: 如果DateTime("now")返回`2017-02-16 12:00'并将其与'2017-02-16 00:00:00'进行比较,则会得到0天-12小时。与“2017-02-17 00:00:00”进行比较相同,即0天+12小时。当你要求日间差异时,你得到的日期部分在两种情况下均为0。

答案 1 :(得分:0)

这将为您提供预期的结果:

    function notBeforeDate($date_to_compare) {
    $now = date_create('now');
    $date = date_create($date_to_compare);


    $diff=date_diff($now,$date);
    return $diff->format("%r%a");
}
var_dump( notBeforeDate('2017-02-17 12:48:00'))