2013-07-09 2 views
4

У меня есть строка:Разбирают французские даты в PHP

"Ланди, 08 Juillet 2013 9:09"

Как я могу разобрать этот тип строку?

Стараюсь:

$date = '08 Juillet 2013 09:09'; 
    $date = new \DateTime($date); 

Но бросить исключение

+1

возможно дубликат [StrToTime с различными языками?] (Http://stackoverflow.com/questions/6988536/strtotime-with-different-languages) – Tom

+0

ли этот ответ дает вам немного света: http://stackoverflow.com/a/8051979/188331? – Raptor

ответ

2
$date = '08 Juillet 2013 09:09';; 
$find = array('janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'); 
$replace = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); 
$date = str_replace($find, $replace, strtolower($date)); 
date = date('Y/m/d', strtotime($date)); 
+1

Хороший! Но вы забыли «octobre» в массиве $ find :) – Manu

0

Вы можете использовать strftime. Если есть только один язык, и вы используете общий хостинг, где французский не поддерживается, вы можете построить массив с месяцами и заменить его на английскую версию.

0

попробуйте этот код, важно первым использованием setlocale

$date = '08 Juillet 2013 09:09'; 
setlocale(LC_TIME, 'fr-FR'); 
$time = strptime($date, "%d %B %G %H:%M"); 
print_r($time); 
1

Если формат фиксируется, используйте strptime в сочетании с французским locale:

date_default_timezone_set("UTC"); 
setlocale(LC_ALL, 'fr_FR'); 
$date = '08 Juillet 2013 09:09'; 
$date = strptime($date, '%d %B %Y %H:%M'); 
var_dump($date); 

См strftime для описания format строки.

8

Расширение intl можно использовать для этого:

// create formatter 
$fmt = new IntlDateFormatter(
    "fr-FR", 
    IntlDateFormatter::FULL, 
    IntlDateFormatter::FULL, 
    'Etc/UTC', 
    IntlDateFormatter::GREGORIAN, 
    'EEEE, dd MMMM y hh:mm' 
); 

// parse 
$ts = $fmt->parse('Lundi, 08 Juillet 2013 09:09'); 
echo $ts; // 1373274540 
+2

стоит отметить, что 'intl' доступен только для PHP> = 5.2, но это, безусловно, лучшее решение. +1 –

+1

Это должно стать ответом. – pinkvoid

0

в DateTime стандарт поддерживает только этот список

http://www.php.net/manual/en/class.datetime.php

DateTime::ATOM 
DATE_ATOM 
Atom (example: 2005-08-15T15:52:01+00:00) 
DateTime::COOKIE 
DATE_COOKIE 
HTTP Cookies (example: Monday, 15-Aug-05 15:52:01 UTC) 
DateTime::ISO8601 
DATE_ISO8601 
ISO-8601 (example: 2005-08-15T15:52:01+0000) 
DateTime::RFC822 
DATE_RFC822 
RFC 822 (example: Mon, 15 Aug 05 15:52:01 +0000) 
DateTime::RFC850 
DATE_RFC850 
RFC 850 (example: Monday, 15-Aug-05 15:52:01 UTC) 
DateTime::RFC1036 
DATE_RFC1036 
RFC 1036 (example: Mon, 15 Aug 05 15:52:01 +0000) 
DateTime::RFC1123 
DATE_RFC1123 
RFC 1123 (example: Mon, 15 Aug 2005 15:52:01 +0000) 
DateTime::RFC2822 
DATE_RFC2822 
RFC 2822 (Mon, 15 Aug 2005 15:52:01 +0000) 
DateTime::RFC3339 
DATE_RFC3339 
Same as DATE_ATOM (since PHP 5.1.3) 
DateTime::RSS 
DATE_RSS 
RSS (Mon, 15 Aug 2005 15:52:01 +0000) 
DateTime::W3C 
DATE_W3C 

он должен быть 08 July 2013 09:09 вместо 08 Juillet 2013 09:09 или использовать strtotime вместо этого, если вы не можете изменить Juillet к July

Смежные вопросы