如果当前日期和另一个日期之间的差异低于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
答案 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'))