2013-09-20 5 views
4

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

$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(), которая дает мне результат в одном слое?

ответ

8

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

$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 на сегодняшний день.

+0

Хороший подход, хорошее и бережное мышление. Благодаря! –

Смежные вопросы