Возможный дубликат:
php date compare
У меня есть дата, которую я беру из базы данных mySQL, которая выглядит так:
2011-06-20
И я получаю дату текущего дня следующим образом:
$todaydate = date('Ym-d');
Мне нужно знать, как сравнить два результата?
Как я могу сравнить даты и понять, например, если неделя передается из даты базы данных или месяца или года … и т. Д.?
Спасибо!!
Нет необходимости ставить эту нагрузку на PHP, когда MySQL имеет встроенные функции для этого уже. Вы должны взглянуть на DATEDIFF()
MySQL:
DATEDIFF()
возвращаетexpr1
–expr2
выраженное как значение в днях от одной даты к другой.expr1
иexpr2
– этоexpr1
даты или даты и времени. В расчетах используются только части даты.
Примером двух дат, которые дают 7-дневную разницу, может быть:
mysql> select datediff('2011-06-18','2011-06-25'); +-------------------------------------+ | datediff('2011-06-18','2011-06-25') | +-------------------------------------+ | -7 | +-------------------------------------+
Это означает, что первая дата произошла через 7 дней после первой даты; это за 7 дней до этого . Если вы разрешите использовать два аргумента, результат будет положительным. 7.
Как насчет использования UNIX_TIMESTAMP? Он использует концепцию прошедшего времени.
«Старый» способ сравнить две или более даты – это преобразовать в временную метку unix (секунды в float) с помощью функции strtotime (). Например:
if((strtotime('2011-05-10') - strtotime('2011-05-01')) > 604800) { echo('A week has passed'); } if((strtotime('2011-06-10') - strtotime('2011-05-01')) > 2629743) { echo('A month has passed'); }
Или «новым» способом является использование класса DateTime в комплекте с PHP 5.2 или новее. Посмотрите http://php.net/manual/en/book.datetime.php .
И, конечно, date_diff имеет множество примеров.
Вам нужно рассмотреть то, что вы точно ищете.
Вы хотите отфильтровать даты старше недели? Вы можете сделать это сравнение на SQL, и вы не нагружаете PHP сопоставлением дат.
Вы хотите разницу в дате? Опять же, я предлагаю поместить его в SQL и просто показать результат.
Это даст вам количество секунд между двумя датами:
<?php $time = '2011-06-20'; $timeDiff = time() - strtotime($time); echo $timeDiff; ?>
Вы можете разделить это значение на 86 400, чтобы получить количество дней и т. Д.