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 5.3 date_diff функция (я использую PHP 5.2.17), есть ли простой и точный способ сделать это? Я думаю о чем-то вроде кода ниже, но я не знаю, как учитывать високосные годы:
Я пытаюсь определить, сколько месяцев человеку.
8 ответов
вы можете включить дни где-то тоже, в зависимости от того, имеете ли вы в виду весь месяцев или нет. Надеюсь, вы поняли.
Это простой метод, который я написал в своем классе, чтобы подсчитать количество месяцев, участвующих в двух заданных датах:
Если вы хотите включить дни, то используйте это:
недавно мне нужно было рассчитать возраст в месяцах от пренатального до 5 лет (60 + месяцев).
ни один из ответов не работал для меня. Первый, который я пробовал, который в основном является 1 лайнером для ответа deceze
это не удается с установленными датами, очевидно, ответ должен быть 0, поскольку метка месяца (2011-12-04) еще не достигнута, как бы код ни возвращал 1.
второй метод, который я пробовал, используя Adam’s код
Это не удается, и говорит 0 месяцев, когда он должен быть 1.
что сработало для меня-это расширение настоящего Кодекса. Я использовал следующее:
следите за ответом @deceze (я проголосовал за его ответ). Месяц все равно будет считаться целым, даже если день первого свидания не дошло до дня второго свидания.
вот мое простое решение по включению дня:
Калькулятор дней
Калькулятор дней поможет рассчитать количество дней между двумя датами, определит дату через любое количество дней в будущем или прошлом, а также покажет количество дней до ближайших праздников и день недели для любой даты.
Это интересно!
Например, такой калькулятор дат удобен, если вам нужно посчитать просрочку по договору (пеня обычно рассчитывается за каждый просроченный день). Или вычислить, до какой даты хватит каких-либо запасов при заданном среднесуточном расходе. Или выяснить, попадет ли важная для вас дата Калькулятор ЕГЭ
Калькулятор беременности и родов
Калькулятор пенсии
Ипотечный калькулятор на рабочий день или на выходные, или узнать, сколько времени осталось у вас до намеченной даты.
Количество дней между двумя датами
Какая будет дата через Х дней?
до ближайшей субботы осталось дней: 1
до зарплаты осталось дней: 5 (считаем, что зарплату выдают 10 числа)
до Нового Года осталось дней: 57
до 23 февраля осталось дней: 110
до 8 марта осталось дней: 123
до 1 мая осталось дней: 177
до дня Победы осталось дней: 185
до дня России осталось дней: 219
до дня Народного Единства осталось дней: 364