日期时间转换:"在数据库中找不到时区"

Ant*_*iro 3 php datetime

我正在尝试转换我从API接收的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;
}
Run Code Online (Sandbox Code Playgroud)

我给了我

 "2013-06-14T04:00:36.000-03:00"
Run Code Online (Sandbox Code Playgroud)

这就是我要做的事情,将它转换回来:

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(); 
}
Run Code Online (Sandbox Code Playgroud)

DateTime类给我一个null,没有错误,但从DateTime扩展的Carbon(https://github.com/briannesbitt/Carbon)告诉我发生了什么,这是输出:

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
Run Code Online (Sandbox Code Playgroud)

所以,只是从它工作的日期时间中删除".000",但是为什么,如果它是由PHP使用完全相同的格式创建的,我用它来转换它?

dev*_*ler 10

它的格式不一样.您收到的字符串的正确格式为:

$format = "Y-m-d\TH:i:s.uP";
Run Code Online (Sandbox Code Playgroud)