разница дней между датами php
Как вычислить разницу между двумя датами с помощью PHP?
у меня есть две даты в виде:
теперь мне нужно найти разницу между этими двумя в следующей форме:
Как я могу это сделать в PHP?
30 ответов
вы можете использовать strtotime() для преобразования двух дат во время unix, а затем вычислить количество секунд между ними. Из этого довольно легко вычислить различные периоды времени.
Edit: очевидно, что предпочтительный способ сделать это, как описано ниже Юрка. Мой код обычно рекомендуется только если у вас нет PHP 5.3 или лучше.
несмотря на все это, я решил обращаться с жалобами. Если вам действительно нужен точный диапазон, но у вас нет доступа к PHP 5.3, используйте код ниже (он также должен работать в PHP 4). Это прямой порт кода, который PHP использует внутри для расчета диапазонов, за исключением того, что он не учитывает летнее время. Это означает, что он выключен максимум на час, но за исключением этого он должен быть правильным.
Я предлагаю использовать объекты DateTime и DateInterval.
начиная с PHP 5.2.2, объекты DateTime можно сравнивать с помощью операторов сравнения.
лучший курс действий-использование PHP DateTime (и DateInterval ) объекты. Каждая дата инкапсулируется в DateTime объект, а затем разница между ними может быть сделана:
на DateTime объект примет любой формат strtotime() будет. Если требуется еще более конкретный формат даты, DateTime::createFromFormat() можно использовать для создания DateTime объект.
после создания экземпляра обоих объектов вы вычитаете один из другого с помощью DateTime::diff() .
$difference теперь DateInterval объект с информацией разницу. А var_dump() выглядит так:
в формате DateInterval объект, нам нужно проверить каждое значение и исключить его, если это 0:
просмотр часов и минут и секунд..
взгляните на следующую ссылку. Это лучший ответ, который я нашел до сих пор.. 🙂
не имеет значения, какая дата раньше или позже, когда вы проходите в параметры даты. Функция использует абсолютное значение PHP ABS() для всегда возвращайте положительное число как количество дней между двумя даты.
имейте в виду, что количество дней между двумя датами не включительно. Так что, если вы ищете количество дней представлено всеми датами между и включая введенные даты, вам нужно будет добавить один (1) к результату этой функции.
Я голосовал за Юрка ‘ s ответ как это мой любимый, но у меня есть pre-php.5.3 версии.
я получил оригинальную идею от здесь, который я изменил для моего использования (и я надеюсь, что моя модификация будет отображаться на этой странице).
Я не знаю, используете ли вы фреймворк PHP или нет, но многие фреймворки PHP имеют библиотеки даты/времени и помощники, которые помогут вам не изобретать колесо.
Как правильно вычислить разницу между двумя заданными датами php [дубликат]
Как вычислить количество дней между двумя датами?
Пробовал так, но не получается:
4 ответа 4
записаны в varchar в такой форме 03/14/2019.
Это неправильно. Дата должна быть записана в БД в формате 2019-03-13.
Поэтому перед записью в базу ее надо переформатировать.
после этого разницу можно будет получить прямо в запросе:
Лучше всего это сделать не средствами php, а средствами самого MySQl в запросе. Например что-то вроде:
select DATEDIFF(DATE_FORMAT(arrival,’%d/%m/%Y’),DATE_FORMAT(departure,’%d/%m/%Y’)) as duration from tablename;
Всё ещё ищете ответ? Посмотрите другие вопросы с метками php mysql или задайте свой вопрос.
Связанные
Похожие
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.24.40305
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Работа с датами в PHP
Учебник PHP
Практика
Важное
Регулярки
Работа с htaccess
Файлы, папки
Сессии и куки
Работа с БД
Практика по работе с БД в PHP
Перед чтением см. новые уроки раздела «Важное», которые появились выше.
Практика
Движок PHP
Продвинутые БД
Аутентификация
Практика
ООП и MVC
Абстрактные классы и интерфейсы
Трейты
ООП Магия
Практика
Практика: классы как набор методов
Для работы с датами в PHP применяются различные функции. Мы начнем изучение с функции time.
Функция time, формат timestamp
Функция time возвращает разницу в секундах между 1-го января 1970 года и текущим моментом времени. Такое представление даты называется форматом timestamp.
Зачем нужен timestamp?
Время в формате timestamp используется для того, чтобы найти разницу между датами в секундах.
С помощью функции time мы можем получить только текущий момент времени. Чтобы получить timestamp за любую дату следует использовать функцию mktime:
Функция mktime
Функция mktime работает аналогично функции time, но, в отличие от нее, принимает параметры: mktime(час, минута, секунда, месяц, день, год) (обратите внимание на то, что месяц и день переставлены местами ). Посмотрите примеры работы:
Полученная разница в секундах будет выглядеть так: 683314036 (обновите страницу и это число поменяется).
Вооружившись знаниями о том, что такое формат timestamp (он нам еще понадобится в дальнейшем), изучим более полезные функции для работы с датами, например, функцию date.
Функция date
Функция date выводит текущие дату и время в заданном формате.
Формат задается управляющими командами (английскими буквами), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).
Примеры работы с date:
Второй параметр функции date
Функция date имеет второй необязательный параметр, который принимает момент времени в формате timestamp. Если передать этот параметр, то функция date отформатирует не текущий момент времени, а тот, который передан вторым параметром. Этот timestamp можно получить, к примеру, через mktime (но не обязательно):
Функция strtotime
Следующая полезная функция, которую мы разберем, называется strtotime.
К примеру, я могу передать ей строку ‘2025-12-31’ и функция сама разберет, где тут год, где месяц, а где день, и вернет эту дату в формате timestamp.
Все форматы можно посмотреть тут.
Следующий код вернет дату предыдущего понедельника:
Как добавить или отнять дату
Пример 1
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 1 день и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Пример 2
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Пример 3
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и 1 месяц и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Пример 4
Давайте создадим объект с датой за 2025 год, 1 месяц, 1 день, затем отнимем от нее 1 день и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку.
datetime — Как рассчитать разницу между двумя датами с помощью PHP?
У меня есть две даты в форме:
Теперь мне нужно найти разницу между этими двумя в следующей форме:
Как я могу сделать это в PHP?
Решение
Начиная с PHP 5.2.2, объекты DateTime можно сравнивать с помощью операторов сравнения.
Лучший курс действий — использование PHP DateTime (а также DateInterval ) объекты. Каждая дата заключена в DateTime объект, и тогда разница между ними может быть сделана:
DateTime объект будет принимать любой формат strtotime() было бы. Если нужен еще более конкретный формат даты, DateTime::createFromFormat() может быть использован для создания DateTime объект.
После того, как оба объекта были созданы, вы вычитаете один из другого с помощью DateTime::diff() .
$difference теперь держит DateInterval объект с информацией о разнице. var_dump() выглядит так:
Чтобы отформатировать DateInterval объект, нам нужно проверить каждое значение и исключить его, если оно равно 0:
И мы получаем правильный результат:
20 дней 6 часов 56 минут 30 секунд
Полный код, используемый для достижения цели:
Неважно, какая дата раньше или позже, когда вы переходите в
параметры даты. Функция использует абсолютное значение PHP ABS () для
всегда возвращайте положительное число как количество дней между двумя
даты.
Имейте в виду, что количество дней между двумя датами НЕ
включительно обеих дат. Так что если вы ищете количество дней
представлены всеми датами между и включая введенные даты,
вам нужно будет добавить один (1) к результату этой функции.
Например, разница (как возвращено вышеупомянутой функцией)
между 2013-02-09 и 2013-02-14 составляет 5. Но количество дней или
даты представлены диапазоном дат 2013-02-09 — 2013-02-14 — 6.
Я голосовал за Jurka «s ответ как это мой любимый, но у меня есть версия pre-php.5.3 …
Я обнаружил, что работаю над аналогичной проблемой — именно так я и пришел к этому вопросу в первую очередь — но мне просто нужна была разница в часах. Но моя функция решила и эту проблему довольно хорошо, и у меня нет места в моей собственной библиотеке, где бы она не была потеряна и забыта, так что … надеюсь, это кому-нибудь пригодится.
Я не знаю, используете ли вы PHP-фреймворк или нет, но многие PHP-фреймворки имеют библиотеки даты / времени и помощников, которые помогут вам не изобретать велосипед.
Например, CodeIgniter имеет timespan() функция. Просто введите две метки времени Unix, и он автоматически сгенерирует такой результат:
Сравнение дат
Насколько коректно сравнивать даты таким образом?
Раньше знаю надо было переводить в разные таймштампы, но похоже сейчас, если задать дату именно в таком формате. все должно быть ок, разве не так?
3 ответа 3
Если обе даты точно в формате Y-m-d (или Y-m-d H:i:s ), то логично сравнивать их как строки, т.е.
Но если нет уверенности, что формат дат одинаковый, то лучше привести их к формату unixtime и сравнивать как числа:
Воспользуйтесь функцией strtotime, т.е. переведите ваши строки, которые вы получаете через date в метку времени unix, т.е. в число int и тогда удобно можно сравнить
Сравнивать как строки даты нельзя не в коем случае, это будет не корректно в случае если у вас:
Конечно формат 2011-02-12 вернет корректное сравнение, но это потенциально опасный код.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками php сравнение дата или задайте свой вопрос.
Связанные
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.24.40305
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.