Converti DateTime in PHP
-
02-01-2020 - |
Domanda
Ho una stringa datetime come tale 14/04/2014 4:57:16 PM
e sto usando il datetime di carbonio per lavorarci su di esso.
Tuttavia non appena provo a fare questo
$dt = Carbon::createFromTimestampUTC($encDateTime);
.
Comunque sto ottenendo errori analizzativi: datetime :: __ Costruct (): impossibile parse la stringa del tempo (@ 14/04/2014 5:03:45 PM) alla posizione 3 (/): carattere imprevisto.
UdPate: Ho provato a farlo:
$date = DateTime::createFromFormat('d/m/Y H:i A', $encDateTime);
dd($date->format('Y-m-d H:i:s'));
.
e ottengo il seguente errore Chiamata a un formato funzione membro () su un non oggetto
Puoi per favore aiutami con questo?
Grazie
Soluzione
La tua stringa data contiene uno spazio alla fine - Ecco perché DateTime::createFromFormat()
non riesce a ansimare.Per rimuovere lo spazio bianco extra dall'inizio e / o dall'estremità, è possibile utilizzare trim()
.
Inoltre, è stato originariamente utilizzato H
, che è il formato 24 ore su 24 con gli zeri principali.In questo caso, sembra che tu abbia un formato di 12 ore, quindi utilizzare invece g
(h
funzionerebbe anche).
Il seguente dovrebbe funzionare:
$date = DateTime::createFromFormat('d/m/Y g:i:s A', trim($encDateTime));
.
Quando ricevi tali errori, sempre var_dump()
i valori .In questo modo, puoi controllare se la variabile contiene ciò che pensi che lo faccia.
Altri suggerimenti
Il metodo statico createFromFormat
da DateTime restituisce NULL
quando c'è un errore Parse.Il formato che è stato dato (d/m/Y H:i A
) era sbagliato.Quindi l'errore " chiama a una funzione membro format()
su un non oggetto ".
È possibile creare oggetti DateTime da TimeStrings non standard come questo:
$time = '14/04/2014 4:57:16 PM';
$date = Carbon\Carbon::createFromFormat('d/m/Y g:i:s A', $time);
.
I diversi caratteri del formato disponibili e le loro spiegazioni possono essere trovati in La documentazione per date()
.
Non so nulla di carbonio, ma funziona.Stavi usando un due cifre (h) invece di h (modifica: G è la stessa cosa esatta) nel tuo metodo createfromformat:
$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');
.
Risultato:
2014-04-14 16:57:16
. Basta usare laravel funzione data come:
$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'));
.