Сравнение дат
- 14 March, 2008
- Posted in PHP
Tags : DATE, MySQL, PHP- 5 Comments
Задача: сравнить две даты. Первая – текущая, вторая полученная из MySQL формата DATE средствами PHP.
Всего доступно множество вариантов. Приведу самый простой из них:
// $date_from_mysql - заведомо известная переменная
//(взято из базы в формате ГГГГ-ММ-ДД)
$current_date = date("Y-m-d");
if ($current_date > $date_from_mysql) {
echo 'current_date > date_from_mysql';
} else {
echo 'date_from_mysql > current_date';
}
Сравнить можно как дату, так и время (также DATETIME). Главное чтобы обе строки были в одинаковом формате.
Можно воспользоваться стандартными средствами MySQL:
SELECT NOW() BETWEEN DATE_CURRENT AND DATE_END AS isBetween FROM MY_TABLE
В данном случае доступны такие операторы для сравнения:
=, <, >, <=, >=, BETWEEN;
Также можно воспользоваться оператором сравнения массивов:
// $date_from_mysql - заведомо известная переменная
// (взято из базы в формате ГГГГ-ММ-ДД)
$current_date = date("Y-m-d");
$date1 = explode("-", $date_from_mysql);
$date2 = explode("-", $current_date);
if ($date1>$date2) {
echo 'current_date > date_from_mysql'
} else {
echo 'date_from_mysql > current_date';
}
Следующий способ: удалить все символы кроме цифр из строковых переменных, в которых хранятся даты, и сравнить их как числа.
Вывод: лично я нахожу первый описанный вариант сравнения дат наиболее простым и приемлемым.
[...] сравнении двух дат я уже упоминал ранее. Далее рассмотрим вычитание и [...]
А что лучше – CURRENT_DATE или NOW() ?
А как можно судить, что лучше, если CURRENT_DATE (CURRENT_DATE() или CURDATE()) – возвращает текущую дату, а NOW() (и ее синонимы: CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP) – текущую дату и время. И причем последняя ф-я возвращает 4х байтное число равное кол-ву секунд от 1 января 1970 года до текущего времени по UTC (т.е. не зависимо от локального часового пояса). Первая же ф-я возвращает целое число вида YYYYMMDD, которое означает текущую дату и зависимо от локального часового пояса.
>>> $date1 = explode(“-”, $date_from_mysql);
>>> $date2 = explode(“-”, $current_date);
вместо функции explode помоему нужно использовать функцию str_replace, тоесть будет выглядеть так:
$date1 = str_replace(“-”, “”, $date_from_mysql);
$date2 = str_replace(“-”, “”, $current_date);
Конечно можно. Спасибо.
В ближайшем будущем поправлю статью.