Как сравнить даты в php
Перейти к содержимому

Как сравнить даты в php

  • автор:

Как вычитать и сравнивать даты в PHP?

Предположим, что на вашем сайте стоит ограничение на возраст посетителя. Человек вводит дату рождения, и вам необходимо проверить, сколько же человеку лет относительно текущего дня, и в последующем выполнить какое-то действие.

В PHP существует функция «strtotime», которая преобразовывает указанную дату в метку времени Unix (дата в секундах). Именно она и поможет нам решить обе поставленные задачи.

Вычитание дат в PHP

Как я и говорил ранее – мы воспользуемся функцией «strtotime», применим ее к каждой дате и произведем необходимые операции.

Таким образом, мы получаем количество лет в разнице этих дат.

Важным нюансом здесь является то, что обе даты должны быть в одном формате.

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

Здесь мы с помощью той же функции «strtotime» переведем обе даты в Unix, после чего сравним их как обычные числа.

  $you_date_unix) { echo "Сегодняшняя дата больше указанной"; > else { echo "Указанная дата больше сегодняшней"; > ?>

Здесь также важно отметить то, что обе даты должны быть в одном формате.

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

Раньше знаю надо было переводить в разные таймштампы, но похоже сейчас, если задать дату именно в таком формате. все должно быть ок, разве не так?

Отслеживать
14.3k 1 1 золотой знак 21 21 серебряный знак 35 35 бронзовых знаков
задан 2 окт 2011 в 15:44
Mykhaylo Petyakh Mykhaylo Petyakh
65 1 1 золотой знак 2 2 серебряных знака 7 7 бронзовых знаков
Врядли потому что в таком случае вы сравниваете строки.
2 окт 2011 в 17:33

@AlexWindHope Неправда! Сравните это $curdate = date(‘d.m.Y’, strtotime(‘now’)); $revenge_date = «25.05.2015»; если будут первые числа месяца, то они будет меньше 25, хоть и год будет больше. И код будет работать неправильно!

27 апр 2015 в 19:22

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Если обе даты точно в формате Y-m-d (или Y-m-d H:i:s ), то логично сравнивать их как строки, т.е.

$date1='2011-02-12'; $date2='2012-02-13'; $result=($date1<$date2); //$result === true 

Но если нет уверенности, что формат дат одинаковый, то лучше привести их к формату unixtime и сравнивать как числа:

$date1='2011-02-12'; $date2='13.02.2012'; $result=($date1<$date2); //$result === false $result=(strtotime($date1) 

Отслеживать
20.4k 3 3 золотых знака 27 27 серебряных знаков 49 49 бронзовых знаков
ответ дан 2 окт 2011 в 20:52
196 7 7 бронзовых знаков
Ну практически то же что и я написал только в коде, согласен
3 окт 2011 в 6:02

> Если даты точно в одном формате, то логично сравнивать их как строки, т.е. Это не совсем так. Что бы сравнение строк работало корректно, нужно не только, что бы формат совпадал, но и что бы этот формат соответствовал стандарту ISO 8601, по которому дата записывается по убыванию значимости. Т.е. вариант date('d.m.Y') >= '02.11.2011' уже работать не будет, хоть формат и совпадает.

Как сравнить дату в php?

Есть дата в формате date(d.m.Y);
Одна дата берется на сайте из поля, а вторая берется с сервера. Нужно их сравнить и если дата из поля меньше, чем дата на сервере было написано, что собрание закончено, а если нет, то написано регистрация.
Сделал скрипт, но дата определяется видно не правильно.
Формат вывода даты поставил одинаковый

 $date_end) < echo "регистрация"; >else < echo "регистрация завершена"; >?>
  • Вопрос задан более трёх лет назад
  • 7475 просмотров

2 комментария

Простой 2 комментария

irishmann

$date_end = get_field('meetings_date'); Тоже в формате d.m.Y?
testtoster @testtoster Автор вопроса
irishmann, да. указал формат ввода и вывода именно такой
Решения вопроса 2
Евгений Вольф @Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!

Я думаю один из наиболее простых вариантов - это сначала привести даты к формату Timestamp (т.е. по сути к числу), а потом сравнить их (2 числа). Подробности описаны, например, здесь.

Ответ написан более трёх лет назад
Нравится 3 8 комментариев
testtoster @testtoster Автор вопроса
пробовал, но все равно ошибка
Евгений Вольф @Wolfnsex Куратор тега PHP

testtoster, какая именно ошибка?

P.S. Для PHP тоже есть песочница, можете выложить пример туда (например, суда), посмотрим вместе.

testtoster @testtoster Автор вопроса
Евгений Вольф, просто пишет, что регистрация у всего. даже там где дата ниже текущей указана
Евгений Вольф @Wolfnsex Куратор тега PHP

testtoster, Вы точно привели даты к числовому формату? У меня есть подозрение, что Вы продолжаете сравнивать строки. Предлагаю всё-таки выложить пример. Да, и ещё момент - если у в файле только PHP-код - закрывающий тег в нём не ставится.

Compolomus

Дмитрий @Compolomus Куратор тега PHP
testtoster, https://www.php.net/manual/ru/function.strtotime.php
По идеи переводит в числа
testtoster @testtoster Автор вопроса

Евгений Вольф, я указал пример кода, который пишу. сайт на wordpress. get_field('meetings_date') - поле созданное плагином acf и указано как дата

Евгений Вольф @Wolfnsex Куратор тега PHP
testtoster, у меня даже так работает.

Compolomus

Дмитрий @Compolomus Куратор тега PHP
testtoster, гляньте через вардамп оба значения и типы

irishmann

Научись пользоваться дебаггером

Если формат одинаковый, то это должно работать
if( $date > $date_end)
Если отличается, надо привести к единому
if(time() > strtotime($date_end))

UPD: пару примеров. Посмотреть выполнение можно в песочнице

 $some_date1) ? $some_date1.' прошло' : $some_date1.' еще не наступило', PHP_EOL; //возращает верно, формат один echo (date("d.m.Y") > $some_date2) ? $some_date2.' прошло' : $some_date2.' еще не наступило', PHP_EOL; //возращает верно, приведено к единому формату echo (time() > strtotime($some_date1)) ? $some_date1.' прошло' : $some_date1.' еще не наступило', PHP_EOL; //возращает верно, приведено к единому формату echo (time() > strtotime($some_date2)) ? $some_date2.' прошло' : $some_date2.' еще не наступило', PHP_EOL;

Как сравнить даты в php

Сообщений: 9 Регистрация: 26.01.2016

25.08.2016 13:09:34

Здравствуйте. Не могу сообразить, как сравнить даты без учета года для расчета отпусков. Например, если дата поступления человека на работу 25 июня 2000 г., то при вводе сегодняшней даты (например, 25.08.2016), его стаж для начисления отпуска составляет 2 месяца, а если ввести дату 15 июня (любую дату до 25 июня), то количество дней должно равняться нулю.
У меня получается сравнивать только целые месяцы (выделено красным шрифтом), может есть какая-то функция, с помощью которой можно отсечь год и сравнивать только число и месяц?

Прикрепленные файлы

  • Вопрос.xlsx (26.02 КБ)

Изменено: Lidiya77 - 25.08.2016 13:11:12

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *