将Datetime转换为PHP

将Datetime转换为PHP,php,laravel,laravel-4,php-carbon,Php,Laravel,Laravel 4,Php Carbon,我有一个datetime字符串,例如14/04/2014 4:57:16 PM,我正在使用carbon datetime来处理它 然而,一旦我尝试这样做 $dt = Carbon::createFromTimestampUTC($encDateTime); 但是,我收到了分析错误:DateTime::_construct():无法分析位置3(/)处的时间字符串(@14/04/2014 5:03:45 PM):意外字符 Udpate: 我试着这样做: $date = DateTime::crea

我有一个datetime字符串,例如
14/04/2014 4:57:16 PM
,我正在使用carbon datetime来处理它

然而,一旦我尝试这样做

$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
将返回
NULL
。给出的格式(
d/m/Y H:ia
)错误。因此出现错误“对非对象调用成员函数
format()

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

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

可用的不同格式字符及其解释可以在中找到。

我对碳一无所知,但这是有效的。您在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

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

另外,您最初使用的是
H
,这是带前导零的24小时格式。在本例中,看起来您有一个12小时的格式,因此使用
g
h
也可以)

以下方面应起作用:

$date = DateTime::createFromFormat('d/m/Y g:i:s A', trim($encDateTime));
当您收到此类错误时,始终显示值。通过这种方式,您可以检查变量是否包含您认为它的功能。

只需将laravel date函数用作:

$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'));

什么是
var\u转储($encDateTime)输出?@AmalMurali:返回时间:2014年4月14日4:57:16PM@Gagan:
var\u dump()
永远不会返回该值。确切的输出是什么?我也可能弄错了,但是在你的更新中,你使用了表示2位数小时的H,而不是H-这可能导致字符串没有被解析correctly@AmalMurali:我很确定它会给我这个:string(22)“2014年4月14日下午5:13:18”。。如果你能让我知道你还期待什么,也许我可以提供相关的答案-谢谢我不确定这是如何回答OP的原始问题的?我不知道你的意思。Carbon类显然无法解析日期字符串
无法分析位置3(/):意外字符处的时间字符串(@14/04/2014 5:03:45 PM)。
@AmalMurali-老实说,实际上是这样的。。我使用碳日期时间,正如我在问题中已经提到的。但你也是对的。有一个拖尾空间,修剪它真的很有帮助。如果你能把你的回答作为一个答案,我会把它标记为一个答案,同时我会投票支持汉内斯夫德夫雷肯的回答。我已经从我的答案中删除了对你答案的引用,因为我认为我的答案没有这样做。我还重新表述了你的答案,并稍微修改了格式——希望你不介意。如果您不喜欢,请还原:)@AmalMurali我注意到您删除了引用。实际上这是错误的。
h
必须是
g
。对不起,不管怎样,关键是OP使用了H,它需要2位数的小时。在我的测试中,这也很好,那么为什么是g呢?我在24小时范围内每小时都尝试过,没有失败。事实上,是的,你错了-g和h 12小时格式的一小时,带或不带0 1到12或01到12。g和h是一回事。()老兄<代码>2014年4月14日4:57:16
。前导零在哪里?没有前导零,也就是为什么你用h(或g)而不是h。别再试图欺骗我了:谢谢你解决了我的问题,伙计们,让我无聊的周一下午看起来不错-谢谢