Сравнение даты с датой и временем дает неожиданный результат - PullRequest
0 голосов
/ 27 августа 2018

Хотя есть много сообщений о том, как сравнивать две даты, я не смог найти связанную.

Учтите это:

$x = new \DateTime('2018-08-27');
$y = new \DateTime('2018-08-28');

$interval = $x->diff($y);

$diff = $interval->d; // 1 - fine

Возвращает разницу между двумя датами.- 1 день, который ожидается и правильный.

А пока рассмотрим случай, когда у первого объекта есть дата и время, а у второго нет.

$x = new \DateTime('2018-08-27 09:33:45');
$y = new \DateTime('2018-08-28');

$interval = $x->diff($y);

$diff = $interval->d; // 0 - wrong, expecting 1

Я могу решить это, но я хочу избежать грязных хаков и обходных путей для достижения этого (например, время обрезки).Есть ли какой-нибудь родной способ сделать это?

1 Ответ

0 голосов
/ 27 августа 2018

Проблема в том, что new \DateTime без указания времени по умолчанию - полночь, поэтому между вашими двумя датами только 14:26:15, что составляет менее одного дня.Отсюда $interval->d = 0.Вам нужно будет использовать setTime, чтобы оба раза были в полночь, например

$interval = $x->setTime(0,0,0)->diff($y->setTime(0,0,0));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...