web-dev-qa-db-fra.com

Laravel format DateTime du résultat de la base de données

Ma base de données stocke deux dates au format mysql DateTime YYYY-MM-DD HH:MM:SS. Lorsque j'obtiens ces données (avec d'autres chaînes, etc.), je veux les convertir dans un autre format, peut-être DD.MM.YYYY HH:MM:SS et l'afficher sur ma vue dans une cellule du tableau. Les dates de ma base de données s'appellent date_begin et date_end.

Mieux, lorsque j'obtiens ces dates de la base de données, convertissez-les en DD.MM.YYYY formatez, séparez la date et l'heure, stockez l'heure dans une chaîne personnalisée ("HH1: MM1 - HH2: MM2") et mettez les deux à ma vue.

Comment puis-je atteindre cet objectif? J'ai trouvé quelques exemples à convertir sur la vue, pas dans le contrôleur, mais je pense que ce n'est pas bon pour MVC.

7
quantatheist

Je ne sais pas où vous avez eu l'impression que "le formatage de la date dans la vue n'est pas bon pour MVC", parce que ce n'est pas un problème que ce soit.

Si vous utilisez Eloquent Models vous pouvez le faire très facilement:

1. Ajoutez les colonnes au $dates propriété dans votre classe de modèle:

protected $dates = ['date_begin', 'date_end'];

Cela garantira que les valeurs deviennent mutées à instances Carbon .

2. Dans vos fichiers de vue, vous pouvez utiliser la méthode format que Carbon propose comme ceci:

<!-- To use only the date with the given format -->
{{ $item->date_begin->format('Y.m.d') }}

<!-- To use only the time with the given format -->
{{ $item->date_begin->format('H:i:s') }}

<!-- To use both date and time with the given format -->
{{ $item->date_begin->format('Y.m.d H:i:s') }}

Il n'est pas nécessaire de diviser la valeur en heure et en date, montrez simplement ce que vous voulez de la valeur DateTime en utilisant ce que vous voulez format .


Si vous n'utilisez pas de modèles Eloquent, vous pouvez utiliser manuellement Carbon pour formater votre valeur comme suit:

{{ Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $item->date_begin)->format('Y.m.d') }}
23
Bogdan

J'ai utilisé la solution PHP sans Carbon:

Obtenez la date de la base de données comme vous le faites (avec le format par défaut: AAAA-MM-JJ HH: MM: SS) et lorsque vous l'imprimez sur votre vue, remplacez $item->date_begin à:

date('d-m-Y H:i:s', strtotime($item->date_begin))

Après cela, lorsque vous l'enregistrez sur la base de données, ajoutez la mise à jour de la base de données:

date('Y-m-d H:i:s', strtotime($request->date_begin))
4
gtamborero