Question

J'ai une chaîne datetime en tant que telle 14/04/2014 4:57:16 PM et j'utilise Carbon DateTime pour y travailler.

Cependant, dès que j'essaye de faire ça

$dt = Carbon::createFromTimestampUTC($encDateTime);

Cependant, j'obtiens des erreurs d'analyse :DateHeure ::__construct() :Échec de l'analyse de la chaîne temporelle (@14/04/2014 17:03:45 PM ) à la position 3 (/) :Caractère inattendu.

Mise à jour : J'ai essayé de faire ceci :

$date = DateTime::createFromFormat('d/m/Y H:i A', $encDateTime);
dd($date->format('Y-m-d H:i:s'));

et j'obtiens l'erreur suivanteAppel à une fonction membre format() sur un non-objet

Pouvez-vous s'il vous plaît m'aider avec ça ?

Merci

Était-ce utile?

La solution

Votre chaîne de date contient un espace à la fin - c'est pourquoi DateTime::createFromFormat() ne parvient pas à l'analyser.Pour supprimer les espaces supplémentaires du début et/ou de la fin, vous pouvez utiliser trim().

De plus, vous utilisiez à l'origine H, qui est le format 24 heures avec des zéros non significatifs.Dans ce cas, il semble que vous ayez un format de 12 heures, alors utilisez g plutôt (h fonctionnerait aussi).

Les éléments suivants devraient fonctionner :

$date = DateTime::createFromFormat('d/m/Y g:i:s A', trim($encDateTime));

Lorsque vous recevez de telles erreurs, toujours var_dump() les valeurs.De cette façon, vous pouvez vérifier si la variable contient ce que vous pensez qu'elle fait.

Autres conseils

La méthode statique createFromFormat de DateTime renvoie NULL quand il y a une erreur d'analyse.Le format qui a été donné (d/m/Y H:i A) avait tort.D'où l'erreur "Appel à une fonction membre format() sur un non-objet".

Vous pouvez créer des objets DateTime à partir de chaînes temporelles non standard comme ceci :

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

Les différents caractères de format disponibles et leurs explications se trouvent dans la documentation pour date().

Je ne connais rien à Carbon, mais ça marche.Vous utilisiez un chiffre à deux chiffres (H) au lieu de h (modifier :g est exactement la même chose) dans votre méthode 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');

résultat:

2014-04-14 16:57:16

il suffit d'utiliser laravel la date fonctionne comme :

$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'));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top