Blog. Just Blog

Как на PHP корректно прибавить месяц к дате

27.11.2015 | Категория: Web-мастеру и не только | Автор: ManHunter

Как на PHP корректно прибавить месяц к дате

Одна из интересных задач, с которой мне приходилось сталкиваться на практике при работе с датами на PHP, это так называемый "календарный месяц". То есть некий интервал дат, отличающийся на месяц. Если дата находится где-то в середине или в начале месяца, то никаких сложностей, просто увеличиваем номер месяца на единицу, при необходимости корректируем год. А проблема начинается в тех случаях, когда дата начала интервала приходится на какое-нибудь число в конце месяца. Просто увеличить значение месяца на следующий, оставив число без изменений, нельзя, полученная дата может оказаться несуществующей. Добавлять 30 или 31 день тоже некорректно, в коротком феврале итоговая дата после такого прибавления перемахнет на начало марта. Вот для наглядности несколько примеров, чтобы было понятно, о чем идет речь:
  1. //------------------------------------------------------
  2. // Дата в начале или в середине месяца
  3. //------------------------------------------------------
  4. echo date('d.m.Y',strtotime('2015-01-12 +1 month'));
  5. // 12.02.2015 - правильно
  6.  
  7. //------------------------------------------------------
  8. // Дата в конце месяца
  9. //------------------------------------------------------
  10. echo date('d.m.Y',strtotime('2015-01-29 +1 month'));
  11. // 01.03.2015 - неправильно! Ожидалось 28.02.2015
  12.  
  13. echo date('d.m.Y',strtotime('2015-01-31 +1 month'));
  14. // 03.03.2015 - неправильно! Ожидалось 28.02.2015
  15.  
  16. echo date('d.m.Y',strtotime('2015-11-30 +1 month'));
  17. // 30.12.2015 - неправильно! Ожидалось 31.12.2015
Дата следующего короткого месяца не должна превышать количество дней в нем, а переход с отметки "конец месяца" с 30 числа ноября должен соответствовать отметке "конец месяца" декабря, то есть 31 числу, а никак не 30. Аналогично, конец февраля (28 или 29 число) при увеличении даты на один календарный месяц должен превратиться в 31 марта. Функция работы с датами strtotime, несмотря на всю свою интеллектуальность, в таких случаях просто прибавляет к исходной дате 30 календарных дней или увеличивает месяц на 1.

Читать статью целиком »
Просмотров: 16893 | Комментариев: 6

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.1 сек. / MySQL: 1 (0.0211 сек.) / Память: 4.5 Mb
Наверх