Есть таблица, где даты хранятся в строковом формате вида 11-11-2010. Мне нужно в цикле сравнить сегодняшнюю дату и даты в столбце, после - если они идентичны - вывести сообщение, этих значений может быть больше 1. Вопрос: В каком формате лучше всего хранить данные с Датой? (Чтобы потом они выводились в таблице в виде 11-11-2010 (сразу говорю, что это не дата СЕГОДНЯ, а вводится пользователем произвольно и естественно немаловажно, чтобы с ней было удобно работать и производить вычисления). И каким способом наиболее оптимально проверять их на идентичность? Мое решение пока такое: PHP: <?php $today = "07-11-2010"; // приводим дату СЕГОДНЯ к формату 07-11-2010 $now = getdate (); $datenow = "{$now['mday']}-{$now['mon']}-{$now['year']}"; //7-11-2010 if ($today = $datenow) echo "Даты идентичны"; ?> Подскажите как оптимальнее и правильнее решить данную задачу.
я делал "обратное" вашему проверяя не склеенную сегодняшнюю дату , а разрезая введённую потому что неизвестно когда вам понадобятся каждое число отдельно - например возможно вам нужно будет узнать какой это день недели или посчитать ту же разницу между 2 датами - в вашем варианте прийдётся разрезать или переписывать определённую часть , а в моём просто ввести даты в mktime и делать что пожелаю без лишних действий
либо в int - timestamp, либо date просто с таймстампом легче считать, если секунды и минуты к примеру надо вычислить. date - без заморочек и "человеко" понятный формат. любой из двух приемлем.
unix timestamp PHP: <?php $userDate = strtotime ('07.11.2010'); $databaseDate = strtotime ('06.11.2010'); if ($userDate == $databaseDate) { ... } echo date ('d-m-Y', $userDate);
Спасибо за ответы. Понял, что нужно использовать только UNIX timestamp для работы с датами. Вот привожу код PHP: <?php $databaseDate = '07-11-2010'; $baseDate = strtotime($databaseDate); // именно в таком виде будет храниться дата в дополнительном столбце БД, создается при вводе из формы $todayDate = mktime(0, 0, 0, date("m"), date("d"), date("Y")); // привожу текущую дату к timestamp if ($todayDate == $baseDate) { echo 'Даты идентичны';} ?> Может есть еще какие-то замечания? Правильно ли я привожу текущую дату к timestamp?
вместо $todayDate = mktime(0, 0, 0, date("m"), date("d"), date("Y")); // привожу текущую дату к timestamp можно $todayDate = strtotime('midnight');
time() - Возвращает количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT) до текущего времени. А вопрос состоит чтобы идентичны были даты, а не время в секундах. Получится, что эти две даты будут совпадать только одну секунду. Т.е. наступил новый день - если это день X - то происходит СОБЫТИЕ. Спасибо, попробую
вы неправильно поняли вопрос вопрос был где в коде написан комментарий PHP: <? $todayDate = mktime(0, 0, 0, date("m"), date("d"), date("Y")); // привожу текущую дату к timestamp ?> по факту - работает , значит правильно iliavlad сказал как можно сделать эффективней думаю автор и так знает ф-цию time() и не задавал бы такой вопрос