Создание 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);