Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/09/2008, 00h16   #1
Membre du Club
 
Sylvain
Inscription : avril 2002
Messages : 132
Détails du profil
Informations personnelles :
Nom : Sylvain
Localisation : Canada

Informations forums :
Inscription : avril 2002
Messages : 132
Points : 57
Points : 57
Envoyer un message via MSN à Sylvain245
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
Sylvain245 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 10h49   #2
Membre confirmé
 
Avatar de leodi
 
Homme Paul Bizouard
Directeur technique
Inscription : février 2004
Messages : 173
Détails du profil
Informations personnelles :
Nom : Homme Paul Bizouard
Âge : 22
Localisation : France

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

Informations forums :
Inscription : février 2004
Messages : 173
Points : 202
Points : 202
Envoyer un message via MSN à leodi
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).
leodi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 12h09   #3
Membre du Club
 
Sylvain
Inscription : avril 2002
Messages : 132
Détails du profil
Informations personnelles :
Nom : Sylvain
Localisation : Canada

Informations forums :
Inscription : avril 2002
Messages : 132
Points : 57
Points : 57
Envoyer un message via MSN à Sylvain245
Bonjour,

J'ai tester un peu,

Code :
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
Sylvain245 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 12h40   #4
Membre confirmé
 
Avatar de leodi
 
Homme Paul Bizouard
Directeur technique
Inscription : février 2004
Messages : 173
Détails du profil
Informations personnelles :
Nom : Homme Paul Bizouard
Âge : 22
Localisation : France

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

Informations forums :
Inscription : février 2004
Messages : 173
Points : 202
Points : 202
Envoyer un message via MSN à leodi
Bonjour,

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

Code :
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
leodi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 01h08   #5
Membre du Club
 
Sylvain
Inscription : avril 2002
Messages : 132
Détails du profil
Informations personnelles :
Nom : Sylvain
Localisation : Canada

Informations forums :
Inscription : avril 2002
Messages : 132
Points : 57
Points : 57
Envoyer un message via MSN à Sylvain245
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
Sylvain245 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 11h06   #6
Membre confirmé
 
Avatar de leodi
 
Homme Paul Bizouard
Directeur technique
Inscription : février 2004
Messages : 173
Détails du profil
Informations personnelles :
Nom : Homme Paul Bizouard
Âge : 22
Localisation : France

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

Informations forums :
Inscription : février 2004
Messages : 173
Points : 202
Points : 202
Envoyer un message via MSN à leodi
Citation:
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.
leodi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 14h19   #7
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
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 :
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 :
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/
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 08h51   #8
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
J'ai oublié de préciser que les heures d'été et d'hiver sont prises en compte par ces fonctions.
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h40.


 
 
 
 
Partenaires

Hébergement Web