посчитать разницу в днях php
DateTime::diff
DateTimeInterface::diff
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Описание
Список параметров
Дата и время для сравнения.
Используется, чтобы вернуть абсолютную разницу.
Возвращаемые значения
DateInterval объект представляет разницу между двумя датами или false в случае возникновения ошибки.
Примеры
Пример #1 Пример использования DateTime::diff()
Результат выполнения данных примеров:
Пример #2 Сравнение объектов DateTime
Объекты DateTime могут сравниваться при помощи операторов сравнения.
= new DateTime ( «now» );
$date2 = new DateTime ( «tomorrow» );
Результат выполнения данного примера:
Смотрите также
User Contributed Notes 30 notes
It is worth noting, IMO, and it is implied in the docs but not explicitly stated, that the object on which diff is called is subtracted from the object that is passed to diff.
$date1 = new DateTime(‘now’);
$date2 = new DateTime(‘tomorrow’);
In some situations, this won’t say «in 1 days», but «in 0 days».
I think this is because «now» is the current time, while «tomorrow» is the current day +1 but at a default time, lets say:
Now: 08:00pm, 01.01.2015
Tomorrow: 00:00am, 02.01.2015
In this case, the difference is not 24 hour, so it will says 0 days.
Better use «today», which should also use a default value like:
Today: 00:00am, 01.01.2015
Tomorrow: 00:00am, 02.01.2015
which now is 24 hour and represents 1 day.
This may sound logical and many will say «of course, this is right», but if you use it in a naiv way (like I did without thinking), you can come to this moment and facepalm yourself.
Conclusion: «Now» is «Today», but in a different clock time, but still the same day!
After wrestling with DateTime::diff for a while it finally dawned on me the problem was both in the formatting of the input string and the formatting of the output.
The task was to calculate the duration between two date/times.
1. Make sure you have a valid date variable. Both of these strings are valid:
$strStart = ‘2013-06-19 18:25’ ;
$strEnd = ’06/19/13 21:47′ ;
?>
2. Next convert the string to a date variable
3. Calculate the difference
4. Format the output
[Modified by moderator for clarify]
Using the identical (===) comparision operator in different but equal objects will return false
If you want to quickly scan through the resulting intervals, you can use the undocumented properties of DateInterval.
The function below returns a single number of years, months, days, hours, minutes or seconds between the current date and the provided date. If the date occurs in the past (is negative/inverted), it suffixes it with ‘ago’.
It seems that while DateTime in general does preserve microseconds, DateTime::diff doesn’t appear to account for it when comparing.
= ‘2014-03-18 10:34:09.939’ ;
$val2 = ‘2014-03-18 10:34:09.940’ ;
To work around this apparent limitation/oversight, you have to additionally compare using DateTime::format.
I needed to get the exact number of days between 2 dates and was relying on the this diff function, but found that I was getting a peculiar result with:
I had to end up using :
Though I found a number of people who ran into the issue of 5.2 and lower not supporting this function, I was unable to find any solid examples to get around it. Therefore I hope this can help some others:
Как вычислить разницу между двумя датами с помощью 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 имеют библиотеки даты/времени и помощники, которые помогут вам не изобретать колесо.
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, и он автоматически сгенерирует такой результат: