Ключом является ваша исходная дата публикации.
В месяцах, в которых есть 31 день, если вы находитесь на 31-й день и установите для параметра Month () месяц с меньшим количеством дней (например, февраль, апрель, июнь, сентябрь или ноябрь), он вычисляет дату как 31-й день этого месяца, который переполняется до 1 числа следующего месяца.
Сценарий выше не был запущен как есть, но был запущен:
$oDate->setMonth();
$oDate->setDay();
$oDate->setYear();
echo ...
за каждый месяц, отсюда и разное время.
Проблема проявляется только 31-го числа данного месяца (следовательно, почему, когда ответы были опубликованы, люди не могли повторить проблему), при установке на апрель, июнь, сентябрь или ноябрь; или 29/30/31-го числа месяца при установке месяца на февраль.
Это можно исправить в приведенных выше примерах, указав сначала день, , затем месяц (так как месяц не переполнится).
Вы, конечно, получаете ту же проблему в обратном порядке, когда вы находитесь в месяце с <31 днем, и устанавливаете дни = 31, что переполняется до 1-го числа следующего месяца, то есть ваша дата будет затем 1-го числа правильный месяц! </p>
К сожалению, мне еще предстоит найти простое исправление для этого (кроме написания нового класса дат на основе PHP-класса DateTime).
Надеюсь, это поможет!