Например: 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. Родительный падеж поддерживается.

Наверх