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

Makcym

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

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

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

Dovg

Продвинутый новичок
Makcym
А какой результат вы ожидаете?

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

Makcym

Новичок
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 мая последний день месяца?
 

Makcym

Новичок
Логика такая - если есть такой же день, то этот день. Если нет, то последний день месяца.
29->29 30->30 31->30

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

Это как с natsort - та же сортировка, но с более удобной для человека логике.
 

С.

Продвинутый новичок
Логика такая - если есть такой же день, то этот день. Если нет, то последний день месяца.
Можно еще раз эту же логику, но когда следующий месяц длинее предыдущего?
 

Makcym

Новичок
Можно еще раз эту же логику, но когда следующий месяц длинее предыдущего?
28 февраля +1 месяц = 28 марта
28 февраля +2 месяца = 28 апреля

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

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

Ключевая идея. Если мы добавляем следующий месяц, то должны остаться в диапазоне этого следующего месяца.
 

Dovg

Продвинутый новичок
28 декабря +2 месяца = 28 февраля
30 декабря +2 месяца = 28 февраля
Зарплату бы вам по такой логике выдавали. Желательное в последний день месяца :)
 

Makcym

Новичок
Бизнес логика сложнее и про нее я и не говорю.

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

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