Bonjour,
J’ai passé un temps fou à entrer des horaires en base de données et je crois que je vais devoir tout recommencer. Please Help.
A la base :
- un formulaire permet de créer des horaires d’ouverture et de fermeture d’un lieu
- la ligne est entrée en base de données mysql
- dans le frontend, je récupère ces horaires pour un lieu, et je les affiche.
Le problème :
- le formulaire utilise VUE (ie. javascript).
- l’application utilise API Platform (et Symfony pour coordonner le tout)
- quand je crée l’objet à envoyer à l’api pour l’entrer en BDD, j’utilise :
new Date('les données entrées via l'UI').toISOString()
Quand je console.log l’objet, j’ai donc des données comme ceci :
{ day: "2021-12-17", openingTime: "2021-12-17T08:00:00.000Z", closingTime: "2021-12-17T17:00:00.000Z" }
Alors que l’utilisateur a choisi 9h00 / 18h00. Je retrouve en base de données :
2021-12-27 2021-12-27 08:00:00 2021-12-27 17:00:00
La structure de la table est dans l’ordre date / datetime / datetime. Quand je double-clique sur le closingTime dans Mysql pour éditer les données, il m’indique en bas Time Zone +0200.
Dans le frontend, lors du réaffichage des données, API Platform me renvoie :
"openingTime": "2021-12-17 08:00:00", "closingTime": "2021-12-17 17:00:00",
L’information de la timezone semble perdue en route. Du coup, quand je réaffiche la donnée formatée pour l’utilisateur, l’heure devient incorrecte.
Dans config.yml, j’ai :
Symfony\Component\Serializer\Normalizer\DateTimeNormalizer: arguments: $defaultContext: datetime_format: 'Y-m-d H:i:s' datetime_timezone: 'Europe/Paris'
Comment est-ce que je peux rattraper le coup ? Dois-je tout recommencer ? Comment configurer API Platform pour qu’il me redonne les bonnes heures ?
Merci pour votre aide.