Как разобрать любой формат даты

Я пытаюсь сделать что-то умное, чтобы разобрать дату в любом международном формате.

В моем интерфейсе я использую jquery ui для выбора даты, и каждый язык имеет свой формат даты.

Fr: d / m / Y En: m / d / Y …

ОК, но теперь в php-части мне нужно сохранить эту дату в том же формате (Mysql Ymd). Я бы хотел избежать использования корпуса коммутатора и тому подобного, поэтому я начал искать другую альтернативу.

Лучшее, что я нашел, это

http://www.php.net/manual/en/datetime.createfromformat.php Эта функция позволит мне разобрать даты, если я знаю формат.

Например

$format = 'Ym-d'; $date = DateTime::createFromFormat($format, '2009-02-15'); 

Хорошо, так что это хорошее начало, но теперь я хотел бы найти стандартный формат даты для текущей локали.

Поэтому я нашел это:

http://www.php.net/manual/en/intldateformatter.getpattern.php

Но я не знаю, как заставить его работать, потому что я получаю непогашенные результаты:

 php > $i = new IntlDateFormatter("fr_FR.utf8",IntlDateFormatter::SHORT,IntlDateFormatter::NONE); php > echo $i->getPattern(); dd/MM/yy /* correct ! */ 

но

 php > $i = new IntlDateFormatter("en_US.utf8",IntlDateFormatter::SHORT,IntlDateFormatter::NONE); php > echo $i->getPattern(); M/d/yy /* wtf */ 

Я что-то упускаю ?

благодаря

Не существует «универсального стандарта символа формата даты». Символом «y» может быть двузначный год, 4-значный год или даже 3-буквенный сокращенный месяц (маловероятный), в зависимости от источника.

Символы форматирования для IntlDateFormatter описаны здесь . Как видно из документации, для этой реализации «d» – это дата без начальных нулей, а «dd» содержит ведущие нули. И «М», и «ММ» представляют месяц с ведущими нулями. «Yy» – это 2-значный год.

Существует достаточно разницы между этим и символами формата даты jQuery UI, для которых вам понадобится карта данных для сопоставления IntlDateFormatter формата IntlDateFormatter символами формата jQuery UI datepicker и наоборот.

Что-то вроде этого должно быть достаточно (непроверено):

 // PHP => jQuery $formatMap = array( 'dd' => 'dd', 'd' => 'd', 'MM' => 'mm', 'M' => 'mm', 'yy' => 'y' // and so on... ); 

Как только вы настроите свою карту, вы можете создать свой IntlDateFormatter на основе языка, преобразовать символы этого формата в символы формата даты jQuery UI, а затем отправить формат в интерфейс.

Когда пользователь отправляет назад выбранную дату, вы можете сделать то же самое в обратном порядке, чтобы вернуться к символам IntlDateFormatter . В этот момент вы можете использовать комбинацию IntlDateFormatter::setPattern() для установки формата в стиле MySQL и datefmt_format() (или эквивалент) для фактического форматирования опубликованной даты.

Надеюсь это поможет.