Глюк при работе с датой 31 числа, strtotime("+1 month")

  • Автор темы Автор темы Makcym
  • Дата начала Дата начала

Makcym

Новичок
Глюк при работе с датой 31 числа, strtotime("+1 month")

Сегодня 31 мая и если сделать
PHP:
date("m",strtotime("+1 month")
или
PHP:
date("m",strtotime("+2 month")
получится июль(07).

Есть ли возможность бороться с этим глюком без анализа количества дней в следующем месяце?
 
Makcym
А какой результат вы ожидаете?

Если сегодня 28 января, то какой день будет через месяц? А если 30е января?
 
Makcym
А какой результат вы ожидаете?

Если сегодня 28 января, то какой день будет через месяц? А если 30е января?

28 января +1 месяц = 28 февраля
30 января +1 месяц = 28 февраля последний день месяца

Логично получить умное прибавления даты а не просто +31 days или +30 days под видом 1+ month

1 января +1 месяц = 1 февраля
1 января +2месяца = 1 марта

15 января +1 месяц = 15 февраля
15 января +2месяца = 15 марта

Увидите разработчика PHP передайте ему привет:)
 
30 апреля + 1 месяц = 30 мая
или
30 апреля + 1 месяц = 31 мая последний день месяца?
 
Логика такая - если есть такой же день, то этот день. Если нет, то последний день месяца.
29->29 30->30 31->30

Пример для январь=>февраль
01.27=>02.27 01.28=>02.28 01.29=>02.28 01.30=>02.28 ..

Это как с natsort - та же сортировка, но с более удобной для человека логике.
 
Логика такая - если есть такой же день, то этот день. Если нет, то последний день месяца.
Можно еще раз эту же логику, но когда следующий месяц длинее предыдущего?
 
Можно еще раз эту же логику, но когда следующий месяц длинее предыдущего?
28 февраля +1 месяц = 28 марта
28 февраля +2 месяца = 28 апреля

28 декабря +2 месяца = 28 февраля
30 декабря +2 месяца = 28 февраля

1 декабря +2 месяца = 1 февраля
1 декабря +3 месяца = 1 марта

Ключевая идея. Если мы добавляем следующий месяц, то должны остаться в диапазоне этого следующего месяца.
 
28 декабря +2 месяца = 28 февраля
30 декабря +2 месяца = 28 февраля
Зарплату бы вам по такой логике выдавали. Желательное в последний день месяца :)
 
Бизнес логика сложнее и про нее я и не говорю.

Начинаешь делать простейший вывод 12 следующих месяцев
PHP:
for ($i=1; $i<13; $i++)  echo date("m",strtotime("+$i month");

и получаешь 31 мая два июля. И что рассчитывать дни cal_days_in_month для каждого месяца?

Может подскажете как сделать без костылей?
 
Сверху