Convertir DateHeure en PHP
-
02-01-2020 - |
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
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'));