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

War es hilfreich?

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'));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top