Carbon parse date format

lovis91 picture lovis91 · Feb 27, 2018 · Viewed 14.5k times · Source

I'm trying to parse a date formated like :

2017-09-20T10:59:10.0000000 01:00

I'm using Carbon, so i tried :

Carbon::createFromFormat('Y-m-dTH:i:s.u vP', $date)

Which output :

The timezone could not be found in the database\n
Unexpected data found.\n
Data missing

I guess the last timezone argument maybe wrong but i couldn't find how to parse that date format :/

Thanks for help !

Answer

Alexey Mezenin picture Alexey Mezenin · Feb 27, 2018

You'll need to add a sign to the timezone, for example:

+01:00

Then this will work for you:

Carbon::createFromFormat('Y-m-d\TH:i:s.0000000 P', $date)

If your string can have -01:00 but instead of +01:00 you're getting 01:00, do this first:

$timezone = str_after($date, ' ');
if ($timezone[0] !== '-') {
    $date = str_before($date, ' ') . ' +' . $timezone;
}