8

I have string:

"Lundi, 08 Juillet 2013 09:09"

How can I parse this type string?

I try:

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

But it throw exception

korvinko
  • 700
  • 3
  • 10
  • 23
  • 1
    possible duplicate of [strtotime With Different Languages?](http://stackoverflow.com/questions/6988536/strtotime-with-different-languages) – Tom Jul 09 '13 at 06:54
  • does this answer gives you some light: http://stackoverflow.com/a/8051979/188331 ? – Raptor Jul 09 '13 at 06:54

6 Answers6

12

The intl extension can be used for this:

// 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
Ja͢ck
  • 170,779
  • 38
  • 263
  • 309
3
$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));
Stéphane
  • 1,528
  • 14
  • 21
Expedito
  • 7,771
  • 5
  • 30
  • 43
1

If your format is fixed, use strptime in combination with French 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);

See strftime for description of format string.

Alex Shesterov
  • 26,085
  • 12
  • 82
  • 103
0

You could use strftime. If there's only one language and you use shared hosting where french isn't supported, you could build an array with the months, and replace them with the english version.

Vince V.
  • 3,115
  • 3
  • 30
  • 45
0

try this code, its important to first use setlocale

 $date = '08 Juillet 2013 09:09';
 setlocale(LC_TIME, 'fr-FR');
 $time = strptime($date, "%d %B %G %H:%M");
 print_r($time);
DevZer0
  • 13,433
  • 7
  • 27
  • 51
0

in DateTime standard only support this list

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

it must be 08 July 2013 09:09 instead of 08 Juillet 2013 09:09 or use strtotime instead if you can't change Juillet to July

mohammad mohsenipur
  • 3,218
  • 2
  • 17
  • 22