strtotime()
не проверяет даты.
Если вы делаете
echo date('Y-m-d H:i:00', strtotime('2018-02-30 19:39:45'));
Выходы
2018-03-02 19:39:00
Итак, проблема здесь в том, что вы используете «недопустимую» дату, а PHP суммирует секунды.
Итак, 31 сентября означает 30 сентября + 24 часа (в секундах). При запуске date()
получит дату в секундах и покажет вам действительную дату, первое октября.