Добавление P1M (один месяц) к типу DateInterval добавляет два месяца - PullRequest
0 голосов
/ 31 января 2020

Важное примечание: Мой вопрос конкретно о DateInterval. Я НЕ заинтересован в DateTime::modify(), который предлагается в некоторых ответах. Поэтому это не дубликат.

Я пытаюсь добавить DateInterval из P1M (один месяц) к объекту DateTime, используя объект DateInterval. К сожалению, это, кажется, приводит к добавлению двух месяцев.

Этот код (обратите внимание на эхо):

<?php
    $date = date('m-Y');

    echo $date . '<br />';

    $date_subonemonth = DateTime::createFromFormat('m-Y', $date);
    $date_addonemonth = DateTime::createFromFormat('m-Y', $date); 

    echo $date_subonemonth->format('m-Y') . '<br />';
    echo $date_addonemonth->format('m-Y') . '<br />';

    $one_month = new DateInterval('P1M');

    $date_subonemonth = $date_subonemonth->sub($one_month)->format('m-Y');
    $date_addonemonth = $date_addonemonth->add($one_month)->format('m-Y');

    echo $date_subonemonth . '<br />';
    echo $date_addonemonth . '<br />';      

?>

Выводит следующее:

01-2020
01-2020
01-2020
12-2019
03-2020

последнее эхо должно выводить 02-2020 вместо этого, оно выводит 1-2020, когда я добавил $one_month к нему.

Почему это происходит? И как я могу решить эту проблему, используя DateInterval?

...