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 的日期部分。
我做了一个函数,如果当前日期和另一个日期之间的差异小于 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 的日期部分。