2013-06-15 3 views
2

Я пытаюсь преобразовать DateTime, который я получаю от API.Преобразование DateTime: «Часовой пояс не найден в базе данных»

Это, как их будут генерировать DATETIME строку:

public static function formatDate($date) { 
    $format = "Y-m-d\TH:i:sP"; 
    if ($date instanceof DateTime) { 
     $d = $date->format($format); 
    } elseif (is_numeric($date)) { 
     $d = date($format, $date); 
    } else { 
     $d = (String) "$date"; 
    } 
    return $d; 
} 

Wich дает мне

"2013-06-14T04:00:36.000-03:00" 

И это то, что я делаю, чтобы преобразовать его обратно:

try 
{ 
    $date = Carbon\Carbon::createFromFormat("Y-m-d\TH:i:sP", "2013-06-14T04:00:36-03:00"); 

    echo "<pre>".var_dump($date)."</pre>"; 

    $date = DateTime::createFromFormat("Y-m-d\TH:i:sP", "2013-06-14T04:00:36.000-03:00"); 

    echo "<pre>".var_dump($date)."</pre>"; 

    $date = Carbon\Carbon::createFromFormat("Y-m-d\TH:i:sP", "2013-06-14T04:00:36.000-03:00"); /// raise exception 

    echo "<pre>".var_dump($date)."</pre>"; 
} 
catch(InvalidArgumentException $x) 
{ 
    echo $x->getMessage(); 
} 

Класс DateTime дает мне только нулевое значение, никаких ошибок, но Carbon (https://github.com/briannesbitt/Carbon) расширен от Da teTime говорит мне, что происходит, и это Ouput:

object(Carbon\Carbon)#181 (3) { ["date"]=> string(19) "2013-06-14 04:00:36" ["timezone_type"]=> int(1) ["timezone"]=> string(6) "-03:00" } 

bool(false) 

The timezone could not be found in the database 

Так, просто опуская»0,000" от DateTime это работает, но почему, если он был создан PHP, используя тот же формат, что я используя для его преобразования?

ответ

8

Это не тот же формат. Правильный формат для строки, которую вы принимаете:

$format = "Y-m-d\TH:i:s.uP"; 
Смежные вопросы