Даты сравнения PHP

Возможный дубликат:
сравнение даты php

У меня есть дата, которую я беру из базы данных mySQL, которая выглядит так:

2011-06-20

И я получаю дату текущего дня таким образом:

$todaydate = date('Y-m-d');

Что мне нужно знать, так это то, как мне сравнить два результата?

Как я могу сравнить даты и понять, например, прошла ли неделя с даты базы данных, месяц или год и т. д.?

Спасибо!!


person DiegoP.    schedule 20.06.2011    source источник


Ответы (6)


Нет необходимости возлагать это бремя на PHP, если MySQL уже имеет для этого встроенную функциональность. Вы должны взглянуть на MySQL DATEDIFF()< /а> функция:

DATEDIFF() возвращает expr1expr2, выраженное как значение в днях от одной даты до другой. expr1 и expr2 — это выражения даты или даты и времени. В расчете используются только части дат значений.

Примером двух дат, которые дадут разницу в 7 дней, может быть:

mysql> select datediff('2011-06-18','2011-06-25');
+-------------------------------------+
| datediff('2011-06-18','2011-06-25') |
+-------------------------------------+
|                                  -7 | 
+-------------------------------------+

Это означает, что первое свидание произошло через -7 дней после первого свидания; это за 7 дней до. Если вы позволите двум аргументам поменяться местами, результатом будет положительная 7.

person kba    schedule 20.06.2011
comment
Не могли бы вы привести пример? Например, разница в 7 дней? Я действительно не знаю, с чего начать! Спасибо! - person DiegoP.; 20.06.2011
comment
Я добавил пример. Дополнительные примеры доступны в документации, указанной в ответе. - person kba; 20.06.2011

Как насчет использования UNIX_TIMESTAMP? Он использует понятие прошедшего времени.

person Joyce    schedule 20.06.2011
comment
это склонно к дате 2038 года... ;) - person Frankie; 20.06.2011
comment
@Frankie 2038 находится в ... *будущем*~ - person mauris; 20.06.2011
comment
@thephpdeveloper Вы видели какой-нибудь из тех фильмов-блокбастеров, которые разрушают мир, каким мы его знаем, но сохраняют работоспособность вашего веб-сервера? Там. Я думаю, вы можете добавить cron к 2037 году, чтобы сбросить дату до 1970 года... - person Frankie; 20.06.2011
comment
если программисты ведут себя правильно и используют тип time_t вместо типа uint32, мы в безопасности! time_t обязательно изменится на uint64 до переполнения uint32... или я надеюсь - person Vinicius Kamakura; 20.06.2011
comment
@ Фрэнки, я знаю все, что связано с переполнением. просто говорю' - person mauris; 20.06.2011

«Старый» способ сравнения двух или более дат состоит в том, чтобы преобразовать их в временную метку unix (секунды в формате с плавающей запятой) с помощью функции 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 .

person brunobbmagalhaes    schedule 20.06.2011

И, конечно же, date_diff содержит множество примеров.

person Candide    schedule 20.06.2011

Вы должны учитывать, что именно вы ищете.

  • Вы хотите отфильтровать даты старше недели? Вы можете сделать это сравнение на SQL, и вы не обременяете PHP сравнением дат.

  • Вы хотите разницу в дате? Опять же предлагаю поставить в SQL и просто вывести результат.

person staticsan    schedule 20.06.2011

Это даст вам количество секунд между двумя датами:

<?php
$time = '2011-06-20';
$timeDiff = time() - strtotime($time);
echo $timeDiff;
?>

Вы можете разделить это значение на 86 400, чтобы получить количество дней, и так далее.

person Joel    schedule 20.06.2011
comment
Это может быть сбито с толку переходом на летнее время, особенно если вам нужно больше точности, чем 1 день. Это не рекомендуется. - person staticsan; 20.06.2011