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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top