0

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

但是,一旦我尝试这样做

$dt = Carbon::createFromTimestampUTC($encDateTime);

但是我收到解析错误: DateTime::__construct(): Failed to parse time string (@14/04/2014 5:03:45 PM) 在位置 3 (/): 意外字符。

更新: 我试过这样做:

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

我收到以下错误 Call to a member function format() on a non-object

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

谢谢

4

4 回答 4

9

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

此外,您最初使用H的是 24 小时格式,带有前导零。在这种情况下,您的格式看起来像是 12 小时制,因此请g改用(h也可以)。

以下应该有效:

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

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

于 2014-04-14T17:25:16.907 回答
7

当出现解析错误时,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().

于 2014-04-14T17:14:18.110 回答
5

我对碳一无所知,但这有效。您在 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
于 2014-04-14T17:24:50.400 回答
0

只需将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'));
于 2017-07-29T13:12:27.090 回答