IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Difference date gmt et visiteur


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 96
    Points
    96
    Par défaut Difference date gmt et visiteur
    Bonjour,

    Voila, je conçoit un calendrier d'activités online sur un site web. Les internautes peuvent s'inscrirent aux activités. Comme la date et l'heure de début des activités est différentes selon l'heure du visiteur, j'aimerais stocker la date/Heure dans la base de donnée selon le format GMT.

    Normalement, si je suis au Québec, j'ajoute une nouvelle activité ayant l'heure et la date de début à l'heure du Québec. Pour un utilisateur voyant cette activité qui habite en Roumanie, j'aimerais que l'heure de début qui s'affiche, soit l'heure pour la Roumanie.

    donc quel vous semble la solution la meilleure ?

    alors, il faudrait que je récupère la date et l'heure lors de l'enregistrement de l'activité, et que je compare celle-ci avec l'heure GMT.

    existe-t'il un moyen d'obtenir une différence de date entre le visiteur et l'heure gmt toujours précise ?

    Exemble : pour 22:10:04 UTC au québec j'ai 18:10:04, cependant avec le changement d'heure, ça change souvent, etc...

    vos suggestions ?

    Merci

  2. #2
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    A prioris en php directement, on ne peut pas récupérer le format de date du client (gmt, gmt+2...).
    La solution serait donc de mettre un champ de type hidden lors de son inscription (ou un truc en ajax, qui stoque en session), qui met a jour l'heure toutes les secondes. Ensuite lorsqu'il a envoyé le formulaire tu compares.

    Apres pour l'affichage, tu peux soit utiliser setlocale, soit appliquer les +1, +2 ... a l'heure pour que ca corresponde au client.

    Sinon tu demandes tout simplement le gmt tu client (comme sur les forums).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    J'ai tester un peu,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo "Heure server : ".date("M d Y H:i:s"); 
    echo "Heure gmt : ".gmdate("M d Y H:i:s");
    En février par exemple :
    Heure server : Feb 29 2008 06:01:22
    Heure gmt : Feb 29 2008 11:01:22
    donc différence de 5 heures.

    En septembre :
    Heure server : Sep 29 2008 06:00:47
    Heure gmt : Sep 29 2008 10:00:47
    donc différence de 4 heures.

    donc la différence change, je peux pas me servir uniquement de l'heure du server pour comparer avec celle gmt et de même pour l'heure client avec heure gmt.

    Je préférais demander l'heure du client lors de son inscription dans un formulaire car en javascript s'il n'est pas activé par le navigateur, ça ne donnera rien.

    sachant qu'il y a des pays ou l'on avance ou recule l'heure, ça pourrait aider.
    Quelles s'ont les variables qui font changé la différence entre l'heure locale et l'heure gmt ? et s'il existe un moyen de les récupérés

  4. #4
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    Bonjour,

    Pour récupérer la différence, je proposerais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $serveur = time();
    $gmt = explode(' ', gmdate("m d Y H i s"));
    print_r($gmt); // Pour vérifier
    $gmt =mktime($gmt[5], $gmt[4], $gmt[3], $gmt[0], $gmt[1], $gmt[2]);
     
    $diff = $serveur - $gmt;
    (non testé)

    Mais il y a surement une solution plus simple.
    Au pire : http://fr3.php.net/manual/fr/ref.datetime.php

    Bon courage,
    Paul

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    Cela étant dit,

    1) je demande l'heure du visiteur (5h00) et l'heure du début de l'activité (12h00) dans le formulaire d'ajout.

    2) Je compare l'a différence entre l'heure visiteur (5h00) et l'heure GMT (8h00).
    3) Je prend la différence (3h00) et j'ajoute (12h00+3h00 =15h00) au début de l'activité.
    4) Sauvegarde le début de l'activité (15h00).

    Donc l'activité s'affichera avec 15h00 en heure de début en mode GMT.

    l'utilisateur revient 6 mois plus tard, il faut lui redemander son heure pour reprendre l'exemple mais a l'inverse. Car la différence d'heure a changer (heure d'été, d'hiver, etc..).

    J'aurais aimer un moyen pour afficher les activités selon l'heure du visiteur et pas avoir à lui redemander chaque fois qu'il consulte la page des activités.

    Biensur, un petit javascript pour récupérer l'heure locale machine est possible, parfois l'heure machine n'est pas exacte...

    Donc solution la plus efficace je crois c'est de redemander a chaque consultation des activités, de prendre la différence entre son heure et l'heure gmt, et de remettre l'heure local calculer avec la différence
    , dans le formulaire à la consultation des activités comme valeur par défaut du champ, ça évitera que l'utilisateur le spécifie tout le temps.

    et de sauvegarder la différence dans une base pour être réutiliser pour les valeurs par défaut.

    Pour faire en sorte que l'utilisateur vérifie que l'heure affiché est bien la sienne lors des changements (heure été, hiver), je pensais faire affiché un message lorsque la date du serveur approche les dates de changement d'heures.
    Mais qui détermine la date et l'heure du changement de date ? il faut vérifier soit même ou c'est possible de savoir avec des fonctions php ?

    merci

  6. #6
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    Mais qui détermine la date et l'heure du changement de date ? il faut vérifier soit même ou c'est possible de savoir avec des fonctions php ?
    Ca doit surement exister, il faut chercher. Ensuite a toi de te voir pour savoir si tu es en heure d'été ou d'hiver, et appliquer les changements qu'il faut (en prenant en compte le faire que l'utilisateur peut s'inscrire pendant ces 2 periodes !
    Et ensuite afficher le résultat qu'il faut.

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Lorsque l'utilisateur s'inscrit, tu lui demandes de sélectionner le fuseau horaire dont il dépend, que tu enregistre dans la table 'utilisateur', au format 'AAAA-MM-JJ HH:MM:SS'.
    La fonction ci-dessous génère un élément 'select' contenant la liste des fuseaux horaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
      function getListeTz()
      {
        $select = '<select name="fuseau">
                     <option value="">Sélectionnez votre fuseau horaire</option>';
        $zone = timezone_identifiers_list();
        foreach ($zone as $cle => $valeur)
        {
          $select .= '<option value="' . $valeur . '">' . $valeur . '</option>';
        }
        $select .= '</select>';
        return $select;
      }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="FR" lang="FR">
      <head>
        <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-2" />
        <title>test fuseau horaire</title>
      </head>
      <body>
        <div width="80%" align="center">
          <form name="login" method="post" action="">
            <?php echo getListeTz(); ?>
          </form>
        </div>
      </body>
    </html>
    Lorsqu'il s'inscrit à une activité, tu enregistre l'heure au format GMT.
    Lorsqu'il va s'identifier de nouveau, tu va pouvoir récupérer le fuseau horaire préalablement enregistré.
    A partir de ce fuseau, tu peux obtenir le décalage horaire à appliquer sur l'heure des activités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
      function decalage($fuseau)
      {
        $date = new DateTime();
        $tz = new DateTimeZone($fuseau);
        $date -> setTimezone($tz);
        return $date->getOffset();
      }
     
      //-- exemple ---------------------------------------------------
      //-- $fuseau correspond au fuseau horaire de l'utilisateur -----
      $fuseau = 'America/Montreal';
      $decalage = decalage($fuseau);
      //-- heure serveur ---------------------------------------------
      echo 'Heure du serveur => ' . date('Y-m-d H:i:s') . '<br>';
      //-- calcul de l'heure de l'utilisateur ------------------------
      $chaine = ($decalage >= 0) ? '+' . $decalage . ' seconds' : $decalage . ' seconds';
      echo 'Heure de l\'utilisateur => ' . date('Y-m-d H:i:s', strtotime($chaine));
    ?>
    Ceci ne fonctionne qu'à partir de php 5.1.

    Tu trouveras plus de renseignements ici :
    http://julien-pauli.developpez.com/tutoriels/php/dates/

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    J'ai oublié de préciser que les heures d'été et d'hiver sont prises en compte par ces fonctions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion de date GMT en date locale
    Par mayayu dans le forum C
    Réponses: 10
    Dernier message: 17/05/2007, 15h23
  2. Difference dates et questions conception
    Par lolo_bob2 dans le forum Modélisation
    Réponses: 2
    Dernier message: 23/11/2006, 13h23
  3. [SQL][Timestamp] obtenir une date GMT
    Par JeffK dans le forum Oracle
    Réponses: 9
    Dernier message: 20/07/2006, 17h26
  4. PB/calcul de difference date/heures
    Par edhos dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2005, 08h05
  5. []Comment convertir une date GMT en date vb ?
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 11/08/2004, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo