Как я могу эффективно сравнить две даты и проверить, совпадают ли они в один и тот же день?


У меня есть два DateTime объекта

$lastDate = $entity->getDate(); // is a DateTime with same format as $today
$today    = \DateTime::createFromFormat('!Y-m-d', date('Y-m-d'));

Теперь я хочу проверить, совпадают ли эти две даты в один и тот же день или они разделены более чем на один день (но это также должно включать, если $lastDay вчера в 11 вечера и $today 1 час ночи нового дня).

То, что у меня есть до сих пор, это

$diff = $today->diff($lastDate);

if($diff->days > 0) {
    $return = false;
} else {
    $return = true;
}

Проблема в том, что это, похоже, учитывается, если даты находятся более чем в 24 часах друг от друга, и устанавливается только в true, если это так.

Я мог бы подумать о том, чтобы сравнить их, сравнив $date->format('d');, но это означало бы, что я также проверяю год и месяц. Я знаю, что это сработало бы безупречно, но это было бы пять строк или около того.

Итак, мой вопрос: есть ли более эффективный способ проверить это? Любая операция, подобная diff(), которая дает мне результат в одной строке?

Author: Gottlieb Notschnabel, 2013-09-20

1 answers

Основываясь на вашем последнем изменении, не сработает ли это:

$votedToday = ($today->format('Y-m-d') == $lastDate->format('Y-m-d'));

Я согласен, что немного странно, что у DateTime нет способа просто извлечь часть даты, аналогичную MySQL, но если вы собираетесь использовать format, почему бы не пропустить diff и просто сравнить отформатированную строку даты для полной даты обоих объектов DateTime?

И для дальнейшего упрощения вы могли бы использовать:

$votedToday = ($lastDate->format('Y-m-d') == date('Y-m-d'));

Предполагая, что вы используете $today только для подтверждения, включен ли $lastDate сегодня.

 8
Author: Anthony, 2013-09-20 09:14:35