将Datetime转换为PHP

Gag*_*gan 0 php laravel laravel-4 php-carbon

我有一个日期时间字符串14/04/2014 4:57:16 PM,我正在使用碳日期时间来处理它.

但是,一旦我尝试这样做

$dt = Carbon::createFromTimestampUTC($encDateTime);
Run Code Online (Sandbox Code Playgroud)

但是我得到了解析错误:DateTime :: __ construct():无法解析时间字符串(@ 14/04/04 2014 5:03:45 PM)位置3(/):意外的字符.

Udpate: 我试过这样做:

$date = DateTime::createFromFormat('d/m/Y H:i A', $encDateTime);
dd($date->format('Y-m-d H:i:s'));
Run Code Online (Sandbox Code Playgroud)

我得到以下错误 调用非对象上的成员函数format()

你能帮我解决这个问题吗?

谢谢

Ama*_*ali 9

您的日期字符串在末尾包含一个空格 - 这就是DateTime::createFromFormat()无法解析它的原因.要从开头和/或结尾删除额外的空格,您可以使用trim().

此外,您最初使用的H是24小时格式,带有前导零.在这种情况下,看起来你有一个12小时的格式,所以g改为使用(h也可以使用).

以下应该有效:

$date = DateTime::createFromFormat('d/m/Y g:i:s A', trim($encDateTime));
Run Code Online (Sandbox Code Playgroud)

当您收到此类错误时,请始终使用var_dump()这些值.这样,您可以检查变量是否包含您认为它的作用.


han*_*ken 6

createFromFormat来自DateTime 的静态方法NULL在出现解析错误时返回.给出的格式(d/m/Y H:i A)是错误的.因此错误" 调用format()非对象上的成员函数 ".

您可以从非标准时间字符串创建DateTime对象,如下所示:

$time = '14/04/2014 4:57:16 PM';
$date = Carbon\Carbon::createFromFormat('d/m/Y g:i:s A', $time);
Run Code Online (Sandbox Code Playgroud)

可以在文档中date()找到可用的不同格式字符及其说明.


skr*_*led 5

我对Carbon一无所知,但这很有效.您在createFromFormat方法中使用了两位数(H)而不是h(编辑:g是完全相同的东西):

$encDateTime = "14/04/2014 4:57:16 PM";

$date1 = DateTime::createFromFormat('d/m/Y h:i:s A', trim($encDateTime));
echo $date1->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

结果:

2014-04-14 16:57:16
Run Code Online (Sandbox Code Playgroud)