PHP 日期时间差异格式 returns -0

PHP DateTime diff format returns -0

我做了一个函数,如果当前日期和另一个日期之间的差异小于 x 天,则 returns 为真。

这是我的函数:

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 将 returns -0 和第 +1 天将 returns 0.

例如(假设当前日期是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

这会给你预期的结果:

    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'))

DateTime("now") 将 return 日期和时间。给定 "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") returns `2017-02-16 12:00' 并将其与 '2017-02-16 00:00:00' 进行比较,您将得到 0 天 -12 小时。与“2017-02-17 00:00:00”相比也是如此,它给你 0 天 +12 小时。当您询问日期差异时,您会得到在两种情况下均为 0 的日期部分。