将Datetime转换为PHP


Convert Datetime to PHP

我有一个像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小时的格式,所以使用gh也可以)。

以下内容应该有效:

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

当您收到此类错误时,始终var_dump()。这样,您就可以检查变量是否包含您认为的内容。

当出现解析错误时,DateTime中的静态方法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'));