Сравнение дат

Задача: сравнить две даты. Первая – текущая, вторая полученная из 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';
}

Следующий способ: удалить все символы кроме цифр из строковых переменных, в которых хранятся даты, и сравнить их как числа.

Вывод: лично я нахожу первый описанный вариант сравнения дат наиболее простым и приемлемым.

5 Responses to “Сравнение дат”

  1. [...] сравнении двух дат я уже упоминал ранее. Далее рассмотрим вычитание и [...]

  2. Павел says:

    А что лучше – CURRENT_DATE или NOW() ?

  3. Mihalytch says:

    А как можно судить, что лучше, если CURRENT_DATE (CURRENT_DATE() или CURDATE()) – возвращает текущую дату, а NOW() (и ее синонимы: CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP) – текущую дату и время. И причем последняя ф-я возвращает 4х байтное число равное кол-ву секунд от 1 января 1970 года до текущего времени по UTC (т.е. не зависимо от локального часового пояса). Первая же ф-я возвращает целое число вида YYYYMMDD, которое означает текущую дату и зависимо от локального часового пояса.

  4. Oleh says:

    >>> $date1 = explode(“-”, $date_from_mysql);
    >>> $date2 = explode(“-”, $current_date);

    вместо функции explode помоему нужно использовать функцию str_replace, тоесть будет выглядеть так:
    $date1 = str_replace(“-”, “”, $date_from_mysql);
    $date2 = str_replace(“-”, “”, $current_date);

Leave a Reply




*