How can I compare two dates in PHP?
If I wanted to compare today’s date against the date in the database to see which one is greater, how would I do it?
but it doesn’t really work that way. What’s another way of doing it?
![]()
13 Answers 13
If all your dates are posterior to the 1st of January of 1970, you could use something like:
If you are using PHP 5 >= 5.2.0, you could use the DateTime class:
Or something along these lines.
in the database the date looks like this 2011-10-2
Store it in YYYY-MM-DD and then string comparison will work because ‘1’ > ‘0’, etc.
Just to compliment the already given answers, see the following example:
Update: Or simple use old-school date() function:
![]()
I would’nt do this with PHP. A database should know, what day is today.( use MySQL->NOW() for example ), so it will be very easy to compare within the Query and return the result, without any problems depending on the used Date-Types
![]()
![]()
![]()
Here’s a way on how to get the difference between two dates in minutes.
You can convert the dates into UNIX timestamps and compare the difference between them in seconds.
![]()
I had that problem too and I solve it by:
Here’s my spin on how to get the difference in days between two dates with PHP. Note the use of ‘!’ in the format to discard the time part of the dates, thanks to info from DateTime createFromFormat without time.
Found the answer on a blog and it’s as simple as:
And you’ll get the days between the 2 dates.
![]()
This works because of PHP’s string comparison logic. Simply you can check.
Both dates must be in the same format. Digits need to be zero-padded to the left and ordered from most significant to least significant. Y-m-d and Y-m-d H:i:s satisfy these conditions.
If you want a date ($date) to get expired in some interval for example a token expiration date when performing a password reset, here’s how you can do:
But in your case you could do the comparison just as the following:
![]()
first of all, try to give the format you want to the current date time of your server:
Obtain current date time
Separate date and time to manage them as you wish:
$current_date_only = $current_date[year].’-‘.$current_date[mon].’-‘.$current_date[mday]; $current_time_only = $current_date[‘hours’].’:’.$current_date[‘minutes’].’:’.$current_date[‘seconds’];
Сравнение дат в PHP с помощью функции StrToTime ()
В PHP можно легко создать удобочитаемую дату или время, используя функцию Date() . Эта функция принимает два аргумента: допустимый формат даты и метку времени Unix ( если ее не указывать, функция возвратит текущую дату/время ).
Пример
Приведенный выше пример прекрасно подходит для отображения дат и времени. Но когда дело доходит до PHP сравнения дат, использовать удобные для чтения строки — не самый надежный способ. Намного эффективнее сравнить временные метки. Метка времени Unix содержит количество секунд между 1 января 1970 00:00:00 GMT и указанным временем. Это означает, что можно сравнивать даты вплоть до секунд.
Чтобы использовать функцию date() для возврата конкретной даты необходима метка времени, так что сначала потребуется создать ее. Это можно сделать с помощью функций mktime() или strotime() . Обе функции возвращают метку времени Unix , но при этом принимают различные аргументы.
Функция mktime() требует, чтобы дата и время были переданы ей в виде отдельных сегментов ( часы, минуты, секунды, месяц, день, год ):
В свою очередь функция strtotime() может преобразовать текстовое представление даты/времени в метку времени:
Если при PHP сравнении даты с текущей функция strtotime() получает дату/время, в которых день и месяц располагаются перед годом, эта запись будет интерпретироваться по-разному, в зависимости от используемого разделителя. При использовании косой черты в качестве разделителя функция возвратит метку времени в американском формате ( м/д/г ). При использовании в качестве разделителя тире или точки функция возвратит метку в европейском формате ( д-м-г ).
Как можно увидеть ниже, первая метка времени отличается от двух последних:
Функции mktime() и strtotime() возвращают одинаковый результат. Часто текстовое представление даты и времени (‘ 2016-01-01 ‘) хранится в базе данных и считывается из нее через HTML-форму . Например, при помощи библиотеки jQuery datepicker , которая идеально подходит для использования функции strtotime() .
Прежде чем осуществлять сравнение двух дат в PHP , важно убедиться, что временные метки созданы с помощью одного и того же формата. Можно воспользоваться функцией mktime() . Ее преимущество заключается в том, что она намного строже в отношении передаваемой ей даты или время.
Важным преимуществом использования функции strtotime() является гибкость и простота, с которой можно добавить время или вычесть из него:
Пример, показанный ниже, демонстрирует PHP сравнение даты и операции с использованием функции strtotime() . В нем создается массив дат в заданном диапазоне в соответствии с определенным временным интервалом. Функция print_r() выводит результирующий массив, который выглядит следующим образом:
При сравнении двух дат в PHP внутри цикла while время ( в данном случае семь дней ) добавляется к дате начала и производится проверка, чтобы убедиться больше ли полученная временная метка, чем временная метка даты начала.
Если это не так, новая дата добавляется в массив $DateRange , пока цикл не закончится:
Я использовал оператор switch , чтобы определить несколько различных вариантов временного интервала. Это было сделано для того, чтобы показать, как интуитивные « временные » строки использовались для управления временной меткой с помощью функции strtotime() . В документации по PHP приводятся дополнительные примеры.
ВЛ Виктория Лебедева автор-переводчик статьи « Compare Date and Time With PHP strtotime() | Quick Reference Tutorial »
Дайте знать, что вы думаете по данной теме в комментариях. За комментарии, лайки, отклики, дизлайки, подписки низкий вам поклон!
Работа с датой и временем в PHP в ООП стиле. Часть 1

Перед web-разработчиками часто возникают задачи, в которых они должны работать с датой и временем. Если вы все еще используете PHP функции, такие как strtotime и date для работы с датой и временем в PHP, то вы многое упускаете.
PHP предоставляет специализированный класс DateTime для работы с датой и временем. Однако, многие игнорируют его использование, несмотря на то, что он доступен в PHP начиная с версии 5.2.
Вот несколько причин, почему предпочтительнее использовать класс DateTime вместо strtotime и date:
- Класс DateTime может работать с большим числом форматов даты и времени по сравнению с strtotime.
- Работать с объектами легче, чем с функциями. Даты, являющиеся объектами класса DateTime можно сравнивать напрямую, как обычные числа. Тогда как для сравнения двух дат с помощью функции strtotimе нам необходимо сначала преобразовать их во временные метки и только затем сравнить.
- Объектно-ориентированный интерфейс DateTime скрывает много внутренней логики работы с датой и обеспечивает понятный и однозначный интерфейс.
Создание объекта класса DateTime.
Создание объекта класса DateTime ничем не отличается от создания экземпляра какого-либо другого класса в PHP.
Если в конструктор класса DateTime не передавать параметр, то будет создан объект с текущей временной меткой и временной зоной по умолчанию. Временная зона в PHP, как правило, настраивается в файле php.ini. Вот так создается объект DateTime с текущим временем.
$now = new DateTime();
При необходимости мы можем передать в конструктор класса DateTime строку, представляющую собой правильную дату и время. В качестве временной зоны будет использована та, что установлена по умолчанию.
Несколько примеров создания объекта DateTime с передачей в конструктор строки, содержащей время.
$yesterday = new DateTime('yesterday'); // вчера
$twoDaysLater = new DateTime('+ 2 days'); // на 2 дня вперед
$oneWeekEarly = new DateTime('- 1 week'); // минус одна неделя
Второй параметр конструктора класса DateTime позволяет определить временную зону. Этот параметр имеет тип DateTimeZone.
Например, чтобы создать объект класса DateTime с временной зоной Москвы надо сделать следующее:
$yesterdayInMoscow = new DateTime('yesterday', new DateTimeZone('Moscow'));
Конечно, мы также можем создать объект DateTime как обычно, с помощью строки.
$dateTime = new DateTime('2015-01-01 12:30:12');
Формат
В зависимости от системы, которую мы собираемся проектировать, нам могут понадобится различные форматы даты и времени. Форматирование объекта DateTime в формат необходимый в конкретном проекте достаточно просто делается через метод DateTime::format().
Метод DateTime::format() принимает в качестве параметра строку. Эта строка может включать плейсхолдеры, перечисленные на странице официальной документации PHP.
Например, чтобы получить подобный формат YYYY-dd-mm, где Y – год, d – день, m – месяц необходимо сделать следующее:
Мы можем создать любой желаемый формат даты. Вот несколько дополнительных опций:
Сравнение дат и времени
Для того, чтобы сравнить две даты с помощью встроенной в PHP функции strtotime, нам сначала нужно преобразовать строковое содержимое этих дат в их эквиваленты временных меток.
В отличие же, от данной функции, объект DateTime предоставляет возможность сравнивать два объекта DateTime как два обычных числа. Вот несколько примеров:
$today = new DateTime('today');
$yesterday = new DateTime('yesterday');
var_dump($today > $yesterday); // bool(true)
var_dump($today < $yesterday); // bool(false)
var_dump($today == $yesterday); // bool(false)
Но бывают случаи, когда логическое значение от сравнения двух дат недостаточно. Например, нам нужно знать, точную разницу между двумя датами. И DateTime::diff() является тем методом, который поможет нам узнать разницу между двумя объектами DateTime. Этот метод возвращает объект класса DateInterval, который может быть использован для получения интервала, в любом требуемом нами формате посредством метода DateInterval::format.
Например, для получения количества дней между сегодняшней датой и вчерашней датой, мы можем сделать следующее:
$interval = $today->diff($yesterday);
echo $interval->format('%d день назад') // 1 день назад
Со всем разнообразием свойств класса DateInterval вы можете ознакомиться на официальном сайте PHP.
На этом все, и в следующей статье мы продолжим изучать классы для работы с датой и временем в PHP.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 3 ):
Всем привет извините что пишу здесь но е могли бы подсказать хотел бы узнать как сделать так что бы ретрансляцию для моего сайта хочу чтобы например телеканал тнт транслировалась прямо с моего сайта а не сервера тнт.. Вот этот сайт введет трансляцию мачт тв с своего сервера http://fifa.beta.tj/schedule
Уточните, пожалуйста, вы хотите чтобы, когда пользователь заходил к Вам на сайт, то он мог бы смотреть передачу на вашем сайте?
ну вот например есть код видео трансляции (ТНТ) для вставки для других сайтов . и когда я вставлю этот код у посетителей расходуется трафик из сервера тнт, Я хочу чтобы расходовалось из моего сервера
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Как вычитать и сравнивать даты в PHP?
Предположим, что на вашем сайте стоит ограничение на возраст посетителя. Человек вводит дату рождения, и вам необходимо проверить, сколько же человеку лет относительно текущего дня, и в последующем выполнить какое-то действие.
В PHP существует функция «strtotime», которая преобразовывает указанную дату в метку времени Unix (дата в секундах). Именно она и поможет нам решить обе поставленные задачи.
Вычитание дат в PHP
Как я и говорил ранее – мы воспользуемся функцией «strtotime», применим ее к каждой дате и произведем необходимые операции.
Таким образом, мы получаем количество лет в разнице этих дат.
Важным нюансом здесь является то, что обе даты должны быть в одном формате.
Сравнение дат в PHP
Здесь мы с помощью той же функции «strtotime» переведем обе даты в Unix, после чего сравним их как обычные числа.
Здесь также важно отметить то, что обе даты должны быть в одном формате.