Например: 30 июня 2026
<?php
$dateString = '30 июня 2026';
$formatter = new IntlDateFormatter(
'ru_RU',
IntlDateFormatter::NONE,
IntlDateFormatter::NONE,
null,
null,
'd MMMM yyyy'
);
$timestamp = $formatter->parse($dateString);
if ($timestamp === false) {
throw new Exception('Не удалось распарсить дату');
}
$date = (new DateTime())->setTimestamp($timestamp);
echo $date->format('Y-m-d');
ru_RU - включает русские месяцы (июня, июля, и т.д.) MMMM - полное название месяца, регистр (маленькие буквы) не важен.
Нужен установленный intl. ICU (движок, который знает, как правильно обрабатывать текст, даты, числа и валюты в разных локалях) должен знать русский. Если в системе есть нет, парсинг вернёт false. Родительный падеж поддерживается.