我有一个日期时间字符串14/04/2014 4:57:16 PM
,我正在使用碳日期时间来处理它.
但是,一旦我尝试这样做
$dt = Carbon::createFromTimestampUTC($encDateTime);
但是我得到了解析错误: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'));
我得到以下错误 调用非对象上的成员函数format()
你能帮我解决这个问题吗?
谢谢
您的日期字符串在末尾包含一个空格 - 这就是DateTime::createFromFormat()
无法解析它的原因.要从开头和/或结尾删除额外的空格,您可以使用trim()
.
此外,您最初使用的H
是24小时格式,带有前导零.在这种情况下,看起来你有一个12小时的格式,所以g
改为使用(h
也可以使用).
以下应该有效:
$date = DateTime::createFromFormat('d/m/Y g:i:s A', trim($encDateTime));
当您收到此类错误时,请始终使用var_dump()
这些值.这样,您可以检查变量是否包含您认为它的作用.
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);
可以在文档中date()
找到可用的不同格式字符及其说明.
我对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');
结果:
2014-04-14 16:57:16