Сравнение дат
14.03.2008
Задача: сравнить две даты. Первая - текущая, вторая полученная из 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';
}
Следующий способ: удалить все символы кроме цифр из строковых переменных, в которых хранятся даты, и сравнить их как числа.
Вывод: лично я нахожу первый описанный вариант сравнения дат наиболее простым и приемлемым.
Tags: DATE, MySQL, PHP
29.08.2008 в 15:37
[...] сравнении двух дат я уже упоминал ранее. Далее рассмотрим вычитание и [...]
18.09.2009 в 10:09
А что лучше - CURRENT_DATE или NOW() ?
[Ответить]
21.09.2009 в 11:10
А как можно судить, что лучше, если CURRENT_DATE (CURRENT_DATE() или CURDATE()) - возвращает текущую дату, а NOW() (и ее синонимы: CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP) - текущую дату и время. И причем последняя ф-я возвращает 4х байтное число равное кол-ву секунд от 1 января 1970 года до текущего времени по UTC (т.е. не зависимо от локального часового пояса). Первая же ф-я возвращает целое число вида YYYYMMDD, которое означает текущую дату и зависимо от локального часового пояса.
[Ответить]
14.02.2010 в 15:46
>>> $date1 = explode("-", $date_from_mysql);
>>> $date2 = explode("-", $current_date);
вместо функции explode помоему нужно использовать функцию str_replace, тоесть будет выглядеть так:
$date1 = str_replace("-", "", $date_from_mysql);
$date2 = str_replace("-", "", $current_date);
[Ответить]
Mihalytch Reply:
Февраль 16th, 2010 at 12:45
Конечно можно. Спасибо.
В ближайшем будущем поправлю статью.
[Ответить]