Как я могу эффективно сравнить две даты и проверить, совпадают ли они в один и тот же день?
У меня есть два 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()
, которая дает мне результат в одной строке?
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
сегодня.