Мне нужно получить дату 10 числа текущего месяца. Этот способ не работает:
<?php
$date_start = new DateTime();
$date_start->modify('tenth day of this month');
echo $date_start->format('Y-m-d H:i:s'), "\n";
?>
Полученные результаты:
Warning: DateTime::modify(): Failed to parse time string (tenth day of this month ) at position 10 (o): The timezone could not be found in the database in [...][...] on line 3
Конечно, я могу использовать date('Y-m-10'), но мне нужно сделать его с объектом DateTime ().






Вы можете использовать setDate:
$date_start->setDate($date_start->format('Y'), $date_start->format('m'), 10);
echo $date_start->format('Y-m-d H:i:s'), "\n";
Выход:
2018-10-10 06:49:01
@Martin интересно ... Сейчас октябрь, так что результат правильный. Но когда я пробую tenth day next month, я получаю «2018-11-09», что определенно неверно!
Я нашел правильный способ:
<?php
$date_start = new DateTime();
$date_start->modify('first day of this month');
$date_start->modify('+9 days');
echo $date_start->format('Y-m-d');
?>
Результат на 30.09.2018:
2018-09-10
это спасло меня, спасибо .. это действительно вызывало у меня головную боль. вы можете просто сделать это как ->modify('first day of this month')->modify('+8 day');
Я не думаю, что есть tenth day of this month, есть first day of this month:
Если вы хотите сделать это с DateTime таким образом, попробуйте дважды изменить что-то вроде этого:
$date_start = new DateTime();
$date_start->modify('first day of this month');
$date_start->modify('+9 day');
echo $date_start->format('Y-m-d H:i:s'), "\n";
да, я это вижу, после того, как я отправлю свой ответ, отправил передо мной 2 примерно две минуты :(
к сожалению,
$date_start->modify('tenth day this month');даст вам результат без исключения 2018-10-01 (исходная дата - 30.09.2018)