PHP: Дата синтаксиса из локализованного формата

Мне нужно проанализировать строку даты в многоязычном приложении. У каждого пользователя есть свой язык, а затем формат даты.

Как использовать:

new DateTime($datestr); 

или

 date_parse($datestr); 

с локализованным форматом даты?

Предполагая, что mm / dd / yyyy соответствует формату даты EN и dd / mm / yyyy в формате IT date, я сделал этот тест:

 <?php echo "EN locale<br>\r\n"; setlocale(LC_ALL, 'en_US'); $date="01/02/2015"; //2th Jan $date_array=date_parse($date); $mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']); $datetime=new DateTime($date); echo date("Ymd",$mktime); echo "<br>\r\n"; echo $datetime->format('Ym-d'); echo "<br>\r\n"; echo "IT locale<br>\r\n"; setlocale(LC_ALL, 'it_IT'); $date="01/02/2015"; //1th Feb $date_array=date_parse($date); $mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']); $datetime=new DateTime($date); echo date("Ymd",$mktime); echo "<br>\r\n"; echo $datetime->format('Ym-d'); 

Результатом является SAME-выход, причем оба языковых настроек имеют синтаксический анализ с форматом mm / dd / yyyy. Выход всегда был 2015-01-02 (2 февраля)

Это ответ:

 $formatter = new IntlDateFormatter("en_US", IntlDateFormatter::SHORT, IntlDateFormatter::NONE); $unixtime=$formatter->parse($date); 

И это предыдущий тест, работающий с моим ответом.

 <?php echo "EN locale<br>\r\n"; $date="01/02/2015"; //2th Jan $formatter = new IntlDateFormatter("en_US", IntlDateFormatter::SHORT, IntlDateFormatter::NONE); $unixtime=$formatter->parse($date); $datetime=new DateTime(); $datetime->setTimestamp($unixtime); echo $datetime->format('Ym-d'); echo "<br>\r\n"; echo "IT locale<br>\r\n"; $date="01/02/2015"; //1th Feb $formatter = new IntlDateFormatter("it_IT", IntlDateFormatter::SHORT, IntlDateFormatter::NONE); $unixtime=$formatter->parse($date); $datetime=new DateTime(); $datetime->setTimestamp($unixtime); echo $datetime->format('Ym-d'); echo "<br>\r\n"; 

К сожалению, я не могу заработать свою щедрость … 🙂

 <?php echo "EN locale<br>\r\n"; setlocale(LC_ALL, 'en_US'); $date="01/02/2015"; //2th Jan $date_array=date_parse($date); $mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']); $datetime=new DateTime($date); echo date("m/d/Y",$mktime); echo "<br>\r\n"; echo $datetime->format('m/d/Y'); echo "<br>\r\n"; echo "IT locale<br>\r\n"; setlocale(LC_ALL, 'it_IT'); $date="01/02/2015"; //1th Feb $date_array=date_parse($date); $mktime=mktime($date_array['hour'], $date_array['minute'], $date_array['second'], $date_array['month'], $date_array['day'], $date_array['year']); $datetime=new DateTime($date); echo date("d/m/Y",$mktime); echo "<br>\r\n"; echo $datetime->format('d/m/Y'); 

Это изменения, но вы должны иметь возможность скопировать и вставить код выше, и он будет работать так, как вы хотите.

 echo date("d/m/Y",$mktime); echo date("m/d/Y",$mktime); echo $datetime->format('m/d/Y'); echo $datetime->format('d/m/Y'); 

ссылка http://php.net/manual/en/function.date.php