Konvertieren Sie Datetime in PHP
-
02-01-2020 - |
Frage
Ich habe eine Datetime-Zeichenfolge als solche 14/04/2014 4:57:16 PM
und ich verwende Carbon Datetime, um daran zu arbeiten.
Sobald ich jedoch versuche, dies zu tun
$dt = Carbon::createFromTimestampUTC($encDateTime);
Ich erhalte jedoch Analysefehler:DateTime::__construct():Zeitzeichenfolge (@14.04.2014 17:03:45 Uhr) an Position 3 (/) konnte nicht analysiert werden:Unerwarteter Charakter.
Aktualisierung: Ich habe Folgendes versucht:
$date = DateTime::createFromFormat('d/m/Y H:i A', $encDateTime);
dd($date->format('Y-m-d H:i:s'));
und ich erhalte die folgende FehlermeldungAufruf einer Mitgliedsfunktion format() für ein Nicht-Objekt
Können Sie mir bitte dabei helfen?
Danke
Lösung
Ihre Datumszeichenfolge enthält am Ende ein Leerzeichen – das ist der Grund DateTime::createFromFormat()
kann es nicht analysieren.Um den zusätzlichen Leerraum am Anfang und/oder Ende zu entfernen, können Sie verwenden trim()
.
Außerdem haben Sie es ursprünglich verwendet H
, das ist das 24-Stunden-Format mit führenden Nullen.In diesem Fall sieht es so aus, als hätten Sie ein 12-Stunden-Format, also verwenden Sie es g
stattdessen (h
würde auch funktionieren).
Folgendes sollte funktionieren:
$date = DateTime::createFromFormat('d/m/Y g:i:s A', trim($encDateTime));
Wenn Sie solche Fehler erhalten, stets var_dump()
die Werte.Auf diese Weise können Sie überprüfen, ob die Variable das enthält, was Sie denken.
Andere Tipps
Die statische Methode createFromFormat
from DateTime kehrt zurück NULL
wenn ein Parse-Fehler auftritt.Das angegebene Format (d/m/Y H:i A
) war falsch.Daher der Fehler „Aufruf einer Memberfunktion format()
auf einem Nicht-Objekt".
Sie können DateTime-Objekte aus nicht standardmäßigen Zeitzeichenfolgen wie folgt erstellen:
$time = '14/04/2014 4:57:16 PM';
$date = Carbon\Carbon::createFromFormat('d/m/Y g:i:s A', $time);
Die verschiedenen verfügbaren Formatzeichen und ihre Erklärungen finden Sie in die Dokumentation für date()
.
Ich weiß nichts über Carbon, aber das funktioniert.Sie haben ein zweistelliges (H) anstelle von h verwendet (Bearbeiten:g ist genau dasselbe) in Ihrer createFromFormat-Methode:
$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');
Ergebnis:
2014-04-14 16:57:16
benutz einfach laravel Datumsfunktion als:
$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'));