Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mysql et fuseaux horaires

    17 janvier 2023 à 18:37:17

    Bonjour,

    J'ai un petit problème qui me chiffonne :

    Quand je saisis des données d'un formulaire en locale (site dev sous symfony), la date d'enregistrement sur la base locale est bonne. Quand je saisis sur le serveur distant, la date sur la base distante est mauvaise (1 heure de retard). Le prestataire me dit que la base de données est bien paramétrée (Paris).

    D'où cela peut il venir ?

    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2023 à 23:54:15

      je te conseil de vérifié d'abord si la base de donnée est bien en français :

      SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;

      s'il sort "Europe/Paris" ou "+01:00" tout est OK

      s'il sort "SYSTEM" alors ca veut dire qu'il utilise le même timezone que le système pour vérifié :

      SELECT NOW();

      tu auras la date et l'heure du jour s'il y a un décalage alors ca veut dire que la base de donnée n'est pas sur Paris.

      il reste une solution lors de la connexion à la base de donnée passer cette requête SQL :

      set time_zone = '+01:00';

      attention MYSQL gère très mal heure d'été / hiver.

      donc :

      - soit faire un script en php qui détecte l'heure d'été et hiver pour faire le "set time_zone" qu'il faut.

      - soit tu laisse le time_zone en temp universel :

      set time_zone = '+00:00';

      et tu met ca dans une de t'es librairie :

      ini_set("date.timezone", date_default_timezone_set('Europe/Paris'));



      -
      Edité par wandapanel 18 janvier 2023 à 0:04:02

      • Partager sur Facebook
      • Partager sur Twitter
        18 janvier 2023 à 10:02:32

        Bonjour Wandapane,

        Merci pour ta réponse.

        	
        SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;

        Cela renvoie system

        Select now renvoie la bonne heure (donc sur Paris).

        SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;

        Je ne voie pas où mettre ce code. J'utilise Symfony.


        • Partager sur Facebook
        • Partager sur Twitter
          18 janvier 2023 à 14:21:58

          Pour les timezone, je t'invite à enregistrer en BDD tes dates depuis Doctrine ou Symfony au format ISO 8601 (Appelé ATOM dans PHP) qui contient le timezone actuel du serveur, ça permet de gérer correctement les heures d'hiver/été et de s'assurer d'enregistrer correctement les données depuis tes DTO.

          https://www.php.net/manual/fr/class.datetime.php

          -
          Edité par MaxenceS 18 janvier 2023 à 14:23:16

          • Partager sur Facebook
          • Partager sur Twitter
            27 janvier 2023 à 16:19:59

            Bonjour,

            Merci pour ta réponse.

            Le problème est que j'utilise GEDMO donc je n'ai pas la main sur les enregistrements des dates d'enregistrement. Où dois-je aller dans symfony pour paramétrer GEDMO ? 

            • Partager sur Facebook
            • Partager sur Twitter

            Mysql et fuseaux horaires

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown