我有一个像14/04/2014 4:57:16 PM
这样的日期时间字符串,我正在使用carbon日期时间来处理它。
然而,一旦我尝试做这个
$dt = Carbon::createFromTimestampUTC($encDateTime);
然而,我收到了解析错误:DateTime::__construct():无法解析位置3(/)处的时间字符串(@14/04/2014 5:03:45 PM):意外字符。
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
返回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(edit: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
只需将laravel日期函数用作:
$productsales=DB::table('tbl_trans')
->leftjoin('tbl_product','tbl_product.prod_id','=','tbl_trans.product_id')
->select(DB::raw('count(product_id) as quant'),'product_id','tbl_product.name','tbl_product.code','tbl_product.price')
->groupBy('product_id','code','name','price')
->whereDate('tbl_trans.created_at','2017-07-29')
->get();
return view('reports.productsales',compact('productsales'));