Ошибка `strtotime` при использовании + 1 месяц с января

Я пытаюсь создать календарь ajax с несколькими вкладками для ранее введенного диапазона дат. Но например:

Я хочу получить в следующем месяце, вместо февраля печатается март

$start= "2013-01-31";
$current =  date('n', strtotime("+1 month",$start)) //prints 3

Я думаю, это происходит потому, что в феврале 2014 года 28 и добавляется +31 база с начала месяца, но почему?


person Thiago Masano Cavaloti    schedule 01.11.2013    source источник
comment
Какое число будет целиком (а не только месяц), когда вы это сделаете? Кажется, прибавляет 31?   -  person Floris    schedule 01.11.2013
comment
31 января + 1 месяц = ​​31 февраля = 3 марта (или 2 марта в високосном году)   -  person Niet the Dark Absol    schedule 01.11.2013
comment
FYI strtotime принимает временную метку unix в качестве второго параметра - НЕ строку.   -  person h2ooooooo    schedule 01.11.2013
comment
Как я могу всегда брать следующий месяц из диапазона дат? СПАСИБО!   -  person Thiago Masano Cavaloti    schedule 01.11.2013


Ответы (1)


Вы пытаетесь добавить один месяц к дате 2013-01-31. Он должен дать 31 февраля 2013 года, но, поскольку дата не существует, он переходит к следующему действительному месяцу (март).

Вы можете использовать следующий обходной путь:

$current = date('n', strtotime("first day of next month",strtotime($start)));

Использование класса DateTime:

$date = new DateTime('2013-01-31');
$date->modify('first day of next month');
echo $date->format('n');

Это правильно выведет 2.

Демо!

person Amal Murali    schedule 01.11.2013