Создание DateTime из шаблона, предоставленного расширением intl PHP

У меня есть проект, в котором дата может быть введена в разных форматах по локали, например:

английский формат: 17/04/2017

корейский формат 17. 4. 24.Я получаю эти данные в виде строки в php. Мне нужно, чтобы эта строка была как-то преобразована в объект DateTime. когда у меня есть только это строковое значение, локаль и значения DateType и TimeType для IntlDateFormatter, Проблема в том, что я не могу использовать функцию \DateTime::createFromFormat(), потому что IntlDateFormatter::getPattern() для английской даты возвращается dd/MM/y который не поддерживается форматом объекта DateTime (должен быть d/m/Y)

Пример кода у меня есть:

$locale = 'en_GB';
$value = '17/04/2017';     
$formatter = new IntlDateFormatter($locale, \IntlDateFormatter::SHORT, \IntlDateFormatter::NONE);
$format = $formatter->getPattern();
$dateTime = \DateTime::createFromFormat(format, $value);

Из этого блока кода я получаю $dateTime = false

0 ответов

Я знаю, что, вероятно, уже слишком поздно для ответа, но в случае, если кто-то еще застрял с этим, вот решение: вместо использования метода getPattern используйте синтаксический анализ в программе форматирования, он вернет метку времени, и вы сможете создать DateTime объект из него. Пример:

$locale = 'en_GB';
$value = '17/04/2017';
$formatter = new IntlDateFormatter($locale, \IntlDateFormatter::SHORT, \IntlDateFormatter::NONE);

$timestamp = $formatter->parse($value);
assert($timestamp !== false);
$dateTime = (new \DateTime())->setTimestamp($timestamp);
Другие вопросы по тегам