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 :

définir un timezone en fonction du choix de l'utilisateur


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut définir un timezone en fonction du choix de l'utilisateur
    Bonjour a tous,

    j'aimerais définir un set timezone en fonction de l'utilisateur sur mon site
    j'ai pensé faire sur la page ''tableau de bord'' un menu déroulant auquel l'utilisateur choisirait son time zone.

    cependant, j'ai quelques questions de discussions de ce que je veux faire sur l'implication de mon script en rapport avec:

    1- comment étendre le timezone choisi sur toutes les pages du site

    2- si l'utilisateur choisit un time zone différent , comment les dates stockées dans la base mysql vont s'afficher si elles ont été entrées dans différents time zone?

    voila, j'aimerais recevoir vos commentaires et je soumet mon script

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
    if (isset ($_POST['fuseau']) && !empty($_POST['fuseau'])) {
     
    	if ($_POST['fuseau']) == 1 {
    	date_default_timezone_set('America/Montreal');
     
    	}elseif ($_POST['fuseau']) == 2 {
    	date_default_timezone_set('America/Halifax');
     
    	}elseif ($_POST['fuseau']) == 3 {
    	date_default_timezone_set('America/Regina');
     
    	}elseif ($_POST['fuseau']) == 4 {
    	date_default_timezone_set('America/Edmonton');
     
    	}elseif ($_POST['fuseau']) == 5 {
    	date_default_timezone_set('America/Vancouver');
    	}
    }
    //$fuseau = mysql_real_escape_string($_POST['fuseau']);
     
    <form>
    	<select name="fuseau" size="1" id="fuseau">
    		<?php
    		$listefuseau = array("choisir"=>"Choisir", "1"=>"America/Montreal", "2"=>"America/Halifax",
    				"3"=>"America/Regina","4"=>"America/Edmonton", "5"=>"America/Vancouver");
     
    			foreach ($listefuseau as $valeur=>$fuseau) {
    				$selected =(isset($_POST['submit']) && $_POST['fuseau'] ==$valeur) ? ' selected="selected"' : "";
    				echo '<option value="' . $valeur . '"' . $selected .'>' .$fuseau. '</option>';
     
    	  }			
    ?>	
    	</select>
    	<p>&nbsp;</p> 
    		<input type="submit" name="submit" id="submit" value="Choisir" />
    </form>
    merci de vos commentaires


    ----------------

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    1 - Utilise une session.

    2 - Mysql ne gère pas les fuseaux horaires. Ca va être à toi de traiter les décalages en PHP. Tu peux utiliser les fonction GM comme
    http://www.php.net/manual/fr/function.gmmktime.php

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    cependant, j'ai quelques questions de discussions de ce que je veux faire sur l'implication de mon script en rapport avec:
    Tu n'explique pas le but final que tu souhaite obtenir selon le datetimezone.

    Offrir le choix aux utilisateurs de définir eux même leur zone peut être parfait tout comme à proscrire, ça dépend.


    Le 1ère aspect que je vois, c'est que l'erreur est humaine, est qu'on peu quasi être certain que certains ne vont rien choisir, où se tromper, où peut être même trouver ça amusant de changer de fuseau horaire au gré de la navigation juste pour voir.
    Dans les cas là, les infos seront fausses.
    Faut voir l'impacte que ça aura sur les données.


    Après, en admettant que c'est pour produire des documents plus ou moins officiels, à mon sens la date du serveur serait la meilleurs référence, la plus fiable.
    Mais à coté de ça, la géolocalisation selon l'IP permet d'obtenir la zone géographique d'un utilisateur, ça se fait de plus en plus on dirait, mais la fiabilité reste à confirmer malgré tout.

  4. #4
    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,

    Citation Envoyé par RunCodePhp Voir le message
    ... à mon sens la date du serveur serait la meilleurs référence, la plus fiable.
    Je pense que le plus fiable est l'heure UTC, car elle est invariable, quel que soit le serveur.

  5. #5
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    Sabotage- Tu peux utiliser les fonction GM
    j'ai regardé un peu cette fonction mais je n'arrive pas a me faire une idée comment je pourrais utiliser cette fonction dans mon cas surtout quand elle retourne un timestamp.

    RunCodePhp- (1)Tu n'explique pas le but final que tu souhaite obtenir selon le datetimezone.

    (2) Offrir le choix aux utilisateurs de définir eux même leur zone peut être parfait tout comme à proscrire, ça dépend.
    1- Alors voila, pour moi l'important sur ce site c'est au niveau du stockage de dates dans mysql par les utilisateurs de différents timezones. et lorsque ces dates sont ressorties ou manipuler avec des fonctions telles que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = "UPDATE departs SET places_disponibles = 'COMPLET' WHERE (date_depart <= NOW() AND heure_depart <= DATE_ADD(NOW(),INTERVAL 1 HOUR)) ";
    alors si Mysql ne gere pas les fuseaux horaires, alors il manque quelque chose
    afin de rajuster le NOW() de mysql.

    Une idée serait de peut-etre stocker dans mysql sous forme d'une chaine de caractère au format +2 ou -5 par rapport à GMT. dans une colonne ecartTime par exemple.

    2- oui, j'y ai pensé, en effet, la possibilité que certains utilisateurs n'ajustent pas leur fuseau horaire est certaine. alors il reste peut-etre le faire en javascript. de toute facon, j'ai d'autres fonctions qui utilisera le javascript sur ce site. alors si l'utilisateur désactive le javascript, il ne pourra de toute facon utiliser les autres fonctions comme le XhtmlRequest menus dynamiques.

    Jeca-Je pense que le plus fiable est l'heure UTC, car elle est invariable, quel que soit le serveur.
    ceci aussi pourrait être une idée intéressante mais aurais tu une idée comment l'appliquer?

    merci de vos réponses

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE departs SET places_disponibles = 'COMPLET' WHERE (date_depart <= NOW() AND heure_depart <= DATE_ADD(NOW(),INTERVAL 1 HOUR))
    On ne sait toujours pas le but final, ici on ne sait pas ce que représente la table "depart" et le champ date_depart.

    C'est quoi ?
    Des chambres d'Hôtels, des places de cinéma, des billets d'avion, etc ... ?

    Au feeling comme ça, je dirais que la zone horaire ne serait pas liée aux utilisateurs, mais ce que représente "date_depart" justement.

    Faudrait savoir c'est quoi, car là je ne vois pas.



    Mais définir une zone dans Php ne veux pas dire que cela le sera du coté de MySQL.
    J'ai jamais essayé mais à mon avis NOW() dépendra de l'heure du serveur.
    Faudrait définir la zone du coté de MySQL aussi.
    Mais là encore faut voir de quoi il s'agit : zone dépendante de l'utilisateur ou d'autre chose ?

  7. #7
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    C'est un site de covoiturage

    la table 'depart' enregistre toutes les informations fournis par les utilisateurs voituriers (nombres de passagers, type auto, lieu de départ, destination, etc.) qui désirent annoncer un départ à une date donnée dont le champ 'date_depart'.

    les données sont ensuite affichées dans le 'tableau des départs' que les utilisateurs passagers consultent afin de sélectionner un choix.

    Alors, la question que je me pose, c'est comment établir un système de gestion de décalage de date sur ce site qui permettrait d'enregistrer des dates de départs avec des zones horaires différentes et qui

    1- s'afficherait dans le tableau des départs dans le fuseau horaire de l'utilisateur.

    2- et qui s'adapterait de quelque facon avec les fonctions genre NOW() de Mysql

    RunCodePhp-J'ai jamais essayé mais à mon avis NOW() dépendra de l'heure du serveur.
    quand a moi avec wamp, j'ai du ajuster le time zone de PHP avec set timezone() pour synchroniser mes fonctions date avec mysql


    RunCodePhp-Faudrait définir la zone du coté de MySQL aussi.
    je suis d'accord



    -----------------------

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    quand a moi avec wamp, j'ai du ajuster le time zone de PHP avec set timezone() pour synchroniser mes fonctions date avec mysql
    Tu peux utiliser aussi : ini_set('date.timezone', 'Europe/Paris');
    ini_set() et ini_get() sont spécifiques aux directives du php.ini.
    J'ai fais un petit essai, et bien définir le date.timezone coté Php n'agit pas du coté de MySQL, MySQL se base toujours de l'heure du serveur.

    Citation Envoyé par monlou
    C'est un site de covoiturage
    Ah oui, c'est vrai
    Pas si simple que ça en fin de compte.

    L'idée de travailler en UTC me parais une bonne idée, mais ça va faire une sacrée gymnastique quand même au niveau des conversions.

    Par contre, j'ai jamais effectué ce genre de chose, donc en définitive j'en sais trop rien.
    On va dire qu'on médite un peu.


    En tout cas, vu que c'est du covoiturage, à mon sens la zone horaire ne dépendrait pas des utilisateurs, mais du pays de départ et d'arrivée.


    Si on prend les billets d'avions par exemple, les heures indiquées sont toujours celles de l'heure locale.
    Exemple :
    Départ Paris Orly : 10h00 (ce n'est pas indiqué mais c'est GMT + 2)
    Arrivée Réunion : 22h00 (Toujours rien d'indiqué mais c'est GMT + 4)
    Si on fait un calcul, on pourrait croire qu'il y a 12 heures de vol. Et non, 10 heures car il y a 2 heures de moins à cause du décalage horaire (2 heures en plus par rapport à Paris Orly).

    Par contre, comment ces logiciels sont il conçus, comment les utilisateurs (des compagnies aériennes) saisissent les dates/heures, et comment sont elles enregistrées ?

    Dans cet exemple, et si on enregistre ces heures selon UTC, ça donne :
    Départ Paris Orly : 08h00
    Arrivée Réunion : 18h00
    Une soustraction donnera bien cette fois 10h00 de vol.
    Mais pour afficher les heures, faudra tenir compte de la zone horaire.

    Ca sous entend dans ce dernier exemple que l'utilisateur aura saisie une date/heure local (10h00 / 22h00) mais qu'une conversion est effectuée selon la zone horaire pour enregistrer l'heure UTC dans la Bdd.
    Et rebelote, lors de l'affichage, à nouveau des conversions.

    Comme ça, je dirais qu'il faudrait des zones dans une table pour par exemple permettre de faire des conversions directement au niveau de MySQL.
    Si ça peu se faire, je ne sais pas du tout comment.


    Faut voir s'il est vraiment utile de tout généraliser le site en UTC ou juste la ou les parties concernées, que ce soit au niveau de Php (certaines pages voir certaines parties de code même) que de MySQL (certaines tables).

  9. #9
    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
    Il n'est pas indispensable de connaitre le fuseau horaire, puisqu'aussi bien en javascript qu'en php, il existe les fonctions permettant de récupérer l'offset par rapport à UTC.
    Exemple :
    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
    29
    30
    31
    32
    33
    34
    <?php
      if (isset($_POST['btn']))
      {
        foreach ($_POST as $cle => $valeur)
        {
          echo $cle . ' => ' . $valeur . '<br />';
        }
        echo '<br />';
        $tsDepart = strtotime($_POST['dateDep'] . ' ' . $_POST['heureDep']);
        echo 'heure UTC => ' . date('Y-m-d H:i:s', strtotime('+' . $_POST['offsetUTC'] . ' minute', $tsDepart)) . '<br /><br />';
      }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
      <head>
        <script type="text/javascript">
          function calculOffset(formulaire, jour, heure)
          {
            var elt = jour.split('-');
            d = new Date(elt[0], elt[1] - 1, elt[2]);
            formulaire.offsetUTC.value = d.getTimezoneOffset();
          }
        </script>
        <style type="text/css"></style>
      </head>
      <body>
        <form name="date" method="post" action="" onsubmit="calculOffset(this, this.dateDep.value, this.heureDep.value)">
          Date départ (AAAA-MM-JJ)&nbsp;<input type="text" name="dateDep" value="" /><br />
          Heure départ (HH:MM:SS)&nbsp;<input type="text" name="heureDep" value="" /><br />
          <input type="submit" name="btn" value="valider" />
          <input type="hidden" name="offsetUTC" value="" />
        </form>
      </body>
    </html>
    Attention à une chose : pour la France, javascript donne un offset de -120 mn, alors que php donne +120.

  10. #10
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    RuncodePhp- Dans cet exemple, et si on enregistre ces heures selon UTC, ça donne :
    Départ Paris Orly : 08h00
    Arrivée Réunion : 18h00
    Une soustraction donnera bien cette fois 10h00 de vol.
    Mais pour afficher les heures, faudra tenir compte de la zone horaire.
    mais sur ce site il s'agit d'afficher seulement la date et l'heure de départ sans tenir compte de l'heure d'arrivée, si ca peut simplifier le probleme!

    dans ces 2 champs :
    'date_depart' ('Y-m-d')
    et 'heure_depart'( 'H:i')



    Jeca, j'ai essayé ton script et ca me semble très intéressant de pouvoir trouver le offset et l'heure UTC
    le offset est exprimé en numérique mais je comprends pas encore de quelle facon !!

    alors corrige moi si je fais erreur et si j'ai à comprendre une chose c'est que l'heure UTC s'affiche en rapport avec l'heure du serveur??


    j'essaie de voir comment je pourrais adapter ca avec mes 2 champs:

    'date_depart' ('Y-m-d')
    et 'heure_depart'( 'H:i')

  11. #11
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    j'ai essayé ton script et ca me semble très intéressant de pouvoir trouver le offset et l'heure UTC
    le offset est exprimé en numérique mais je comprends pas encore de quelle facon !!
    Une doc concernant l'Objet Date en Javascript : http://www.w3schools.com/jsref/jsref_obj_date.asp

    Dans le code JS, la date obtenue n'est pas du serveur mais du poste client, de l'utilisateur, son PC.
    Le principe du code de Jeca, le tour de "passe passe" est de récupérer la date saisie (format YYYY-MM-DD), de la spliter dans un tableau (elt).
    On obtient :
    elt[0] : 2010
    elt[1] : 10
    elt[2] : 08
    Ensuite on crée un Objet Date() selon cette date, pour éviter que ça soit la date en cours.
    L'objet date accepte plusieurs paramètre : date(année, mois, jour)

    Cependant, je n'est pas compris pourquoi avoir soustrait 1 au mois ???
    d = new Date(elt[0], elt[1] - 1, elt[2]);

    La méthode getTimezoneOffset() permet d'obtenir le décalage horaire (Offset) en minutes selon la date récupérer (saisie).
    Si on se situe à la Réunion on obtient -240 minutes, soit 4 heures.

    Au bout, formulaire.offsetUTC.value est fait pour insérer le décalage horaire dans le champ caché qui une fois validé pourra être récupéré.


    Le principe me parait tout à fait excellent.
    Mais il y a tout de même un truc qui me chiffonne, du faite que l'heure dépend du PC de l'utilisateur.
    Tant que les itinéraires proposées par les utilisateurs seront en total rapport avec le lieu où ce trouve la personne, ça me semble correcte, ça sera peut être toujours le cas.
    Mais admettons qu'un utilisateur se trouve en France, et qu'il propose un itinéraire dont le départ se trouverait à Londres, il y aura un problème, non ?

    J'ai du mal à le percevoir autrement.
    La date/heure normalement ne dépendrait pas de l'utilisateur, mais du lieu de départ.
    De plus, si on intègre/enregistre dans la date/heure le décalage horaire dans "date_depart", et que dans une requête on fait ceci : date_depart <= NOW(), NOW() sera selon l'heure du serveur.
    Ca risque de fausser les résultats à mon avis.
    Mais je fabule peut être.

    Comme ça, je dirais qu'il faudrait enregistrer la date/heure UTC, et ensuite, soit enregistrer le décalage dans un champ à part, ce qui permettrait d'en tenir compte au niveau du NOW().

    Sinon, normalement l'enregistrement devrait être lié à un lieu, et peut être faudrait il que chaque lieux correspondent à un timezone, ce qui pourrait permettre de définir le timezone à MySQL, ou Php au besoin.
    Mais j'ai jamais essayé ça, je ne sais pas si c'est possible d'ailleurs.


    j'essaie de voir comment je pourrais adapter ca avec mes 2 champs:
    'date_depart' ('Y-m-d')
    et 'heure_depart'( 'H:i')
    Séparer une date/heure dans 2 champs différent ce n'est peut être pas la meilleur façon de faire, car les cas particuliers comme Minuit 00:00:00 se trouve à cheval entre 2 jours différents, et peut être même entre 2 mois différents si c'est le 30 ou 31 du mois.
    Un seul champ DATETIME intègre tout, et théoriquement des calculs sur les date tiendra compte des cas particuliers.

  12. #12
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    RunCodePhp - La méthode getTimezoneOffset() permet d'obtenir le décalage horaire (Offset) en minutes selon la date récupérer (saisie).
    Si on se situe à la Réunion on obtient -240 minutes, soit 4 heures.
    moi à Montreal le offset UTC est +240. j'ai vérifié et tout est ok

    RunCodePhp -Le principe me parait tout à fait excellent.
    Mais il y a tout de même un truc qui me chiffonne, du faite que l'heure dépend du PC de l'utilisateur.
    et aussi, j'entrevois d'autres possibiltés

    -Si l'heure du pc de l'utilisateur est mal réglé

    Mais admettons qu'un utilisateur se trouve en France, et qu'il propose un itinéraire dont le départ se trouverait à Londres, il y aura un problème, non ?

    J'ai du mal à le percevoir autrement.
    La date/heure normalement ne dépendrait pas de l'utilisateur, mais du lieu de départ.
    la, par contre, ca nécessiterait qu'il enregistre l'heure de son départ a l'heure de Londres.

    De plus, si on intègre/enregistre dans la date/heure le décalage horaire dans "date_depart", et que dans une requête on fait ceci : date_depart <= NOW(), NOW() sera selon l'heure du serveur.
    Ca risque de fausser les résultats à mon avis.
    Mais je fabule peut être.
    ici, ca nécessiterait que 'date_depart' soit toujours convertit a l'heure du serveur sauf erreur puisque NOW() est toujours exprimé a l'heure du serveur

  13. #13
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    la, par contre, ca nécessiterait qu'il enregistre l'heure de son départ a l'heure de Londres.
    C'est que qui me parait le plus évident, car l'heure de départ n'a aucun rapport avec l'heure du PC de l'utilisateur, c'est exactement la même chose qu'un billet d'avion.

    Si je recherche un billet aller/retour Réunion/Paris, pour le départ de la Réunion, Ok, l'heures correspondra, mais pour le retour, les heures de départ de Paris indiqués sont selon la France, soit UTC+2.
    Pour tes utilisateurs qui rechercheront des itinéraires aller/retour ça devrait se passer de la même manière à mon sens.
    C'est sur l'heure locale, du pays ou région où tout repose.


    Admettons que c'est ce principe là que tu adopte, vient la question du comment seront enregistrés les heures.
    Il peu avoir 2 manières :
    - Soit elles intègrent le décalage horaire (-4 heures pour le Canada).
    - Ou alors l'heure UTC (donc 0 de décalage) mais le décalage serait par exemple enregistré dans un champ à part.

    A mon avis, utiliser l'heure UTC, donc séparer les chose (2ème cas) serait plus simple.
    En procédant ainsi, il suffit de récupérer la valeur du décalage horaire et l'ajouter à l'heure UTC de base pour afficher les dates/heures coté interface.

    Pour faire des recherches ou pour certaine manipulations dans MySQL ou sur ce champ "date_depart", il y a les fonctions UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME(), les dates/heures devraient être synchros.
    MySQL intègre tout ce qu'il faut normalement.

    Dans ton code du UPDATE par exemple, il faudrait ne plus utiliser NOW() qui dépend de l'heure du système, mais UTC_TIMESTAMP().


    Enfin, je te donne ma façon de voir les choses, pas certain du tout que ça soit la bonne technique.

  14. #14
    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,

    Citation Envoyé par RunCodePhp Voir le message
    Cependant, je n'est pas compris pourquoi avoir soustrait 1 au mois ???
    d = new Date(elt[0], elt[1] - 1, elt[2]);
    En JS, les mois sont numérotés de 0 à 11.

    Pour le reste, le principe que j'ai suggéré ne fonctionne effectivement que si le point de départ se trouve dans le même fuseau horaire que la machine du client-voiturier.
    Pour les autres cas, on en revient au premier message, où le client doit sélectionner un fuseau horaire.

    Je n'ai pas trop le temps maintenant, je repasserai plus tard.

  15. #15
    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
    Pour tous les cas cités précédemment, à part l'usage d'une base de données permettant d'obtenir le fuseau horaire à partir du nom d'une ville, je ne vois pas vraiment de solution.
    Par hasard, en fouillant un peu, j'ai trouvé cette perle rare : une BDD mondiale des ville, avec latitude, longitude et fuseau horaire.
    http://download.geonames.org/export/dump/

  16. #16
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    - RunCodePhp
    Admettons que c'est ce principe là que tu adopte, vient la question du comment seront enregistrés les heures.
    Il peu avoir 2 manières :
    - Soit elles intègrent le décalage horaire (-4 heures pour le Canada).
    - Ou alors l'heure UTC (donc 0 de décalage) mais le décalage serait par exemple enregistré dans un champ à part.

    A mon avis, utiliser l'heure UTC, donc séparer les chose (2ème cas) serait plus simple.
    En procédant ainsi, il suffit de récupérer la valeur du décalage horaire et l'ajouter à l'heure UTC de base pour afficher les dates/heures coté interface.

    Pour faire des recherches ou pour certaine manipulations dans MySQL ou sur ce champ "date_depart", il y a les fonctions UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME(), les dates/heures devraient être synchros.
    MySQL intègre tout ce qu'il faut normalement.

    j'ai aussi trouver cette fonction en php pour obtenir l'heure UTC qui est l'ancien GMT si j'ai bien compris.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo gmdate("Y-m-d\TH:i:s\Z");?>
    Dans ton code du UPDATE par exemple, il faudrait ne plus utiliser NOW() qui dépend de l'heure du système, mais UTC_TIMESTAMP().
    je vais tester ca mais j'aimerais le faire en intégrant un champ date_UTC dans ma table

    avec une fonction pour inscrire aussi la date UTC soit du camp date_depart ou celui du pc de l'utilisateur.

    Jeca- Pour tous les cas cités précédemment, à part l'usage d'une base de données permettant d'obtenir le fuseau horaire à partir du nom d'une ville, je ne vois pas vraiment de solution.

    merci pour la trouvaille
    mais ici, il s'agit juste de 5 fuseaux horaires

  17. #17
    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
    Citation Envoyé par monlou Voir le message
    j'ai aussi trouver cette fonction en php pour obtenir l'heure UTC qui est l'ancien GMT si j'ai bien compris.

    <?php echo gmdate("Y-m-d\TH:i:s\Z");?>
    Cette fonction donne l'heure UTC du serveur, ce qui ne présente pas d'intérêt.
    Citation Envoyé par monlou Voir le message
    mais ici, il s'agit juste de 5 fuseaux horaires.
    Es-tu sûr que le voiturier qui va proposer le point de départ d'un voyage sait dans quel fuseau horaire se trouve celui-ci ?

  18. #18
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par Jeca
    Pour tous les cas cités précédemment, à part l'usage d'une base de données permettant d'obtenir le fuseau horaire à partir du nom d'une ville, je ne vois pas vraiment de solution.
    @Jeca
    Ce serait l'idéal, car l'application ne sera pas dépendante du choix des utilisateurs à ce niveau.
    Faut voir maintenant si ça ne débouche pas sur une usine à gaz.

    Au faite, merci pour les mois en JS, j'avais complètement oublié cet aspect là.

    mais ici, il s'agit juste de 5 fuseaux horaires
    Juste ?
    C'est beaucoup tu veux dire, car la liste des villes doit être assez grosse.

    Comment procède tu pour la création d'un itinéraire par exemple, et surtout au niveau de la ville (ou Etats, code postal, etc ... qui pourrait faire l'affaire) ?
    Les as tu répertoriés, est ce un choix dans une liste (genre SELECT) ?
    Ou est ce que la personne doit saisir le nom dans un champ texte ?

    Ceci dit, comment sont définis les fuseaux horaire aux Canada ?
    Si par exemple ils ont été définis selon les Etats (ou régions, départements, j'en sais rien comment c'est découpé), ça fera nettement moins de données que de répertorier des villes.
    Je serais étonné qu'il y ait des décalages horaires entre 2 villes d'un même Etats par exemple.


    As tu fais des recherche s'il n'y aurait pas un service, une API genre Open gratuite (ou payante si ça peu se faire) qui fournirait le décalage horaire, ou un time_zone où tu pourrais t'appuyer dessus ?


    Sinon, tu peu toujours demander explicitement le fuseau horaire aux utilisateurs, c'est clair que c'est plus simple.
    Faut juste qu'ils ne se trompent pas.


    <?php echo gmdate("Y-m-d\TH:i:s\Z");?>
    Attention à ne pas confondre le décalage horaire et l'heure UTC, c'est 2 choses différentes.
    L'heure UTC c'est l'heure 0, elle est la même qu'où on se trouve, c'est la base.
    Obtenir le décalage horaire selon ton serveur ne t'apportera rien, ce n'est pas ça qui donnera le décalage horaire de tel ou tel endroit, lieu.


    Quelle est ta version de Php ?
    Si c'est Php5.3.*, il y a une classe DateTime (et d'autres comme DateTimeZone, DateInterval) qui à mon sens serait plus adaptée dans ton cas.
    Du moins, je la trouve plus simple à manipuler.

    Pour obtenir l'heure UTC par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $datetime = new DateTime('now', new DateTimeZone('UTC'));
    echo $datetime->format('d/m/Y H:i');

  19. #19
    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
    Dans un message précédent, j'ai indiqué un lien sur une BDD mondiale, librement téléchargeable. Pour le Canada, après nettoyage du fichier, qui ne contient pas que des localités, mais aussi des lieux "remarquables" (forêts, lacs, réserves, etc...), il reste 3010 lignes ; ce qui est peu.
    A chaque localité est affecté un fuseau horaire. Il suffit donc, à mon sens, de générer une liste déroulante dont le texte sera la liste des localités, et la "value", le nom de la localité + le décalage horaire par rapport à UTC, calculé à la génération. Ce n'est pas vraiment une "usine à gaz", non ?
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="id_de_la_localite,offset">nom_de_la_localite</option>
    Sur le serveur, un simple "explode()" permet de séparer les 2 éléments de la "value", sans avoir besoin de calculer quoi que ce soit ni accéder à la BDD.

    C'est de l'explication rapide qui demande à être peaufinée, mais personnellement, je m'orienterais dans une direction de ce genre.

  20. #20
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    Envoyé par Jeca
    Pour tous les cas cités précédemment, à part l'usage d'une base de données permettant d'obtenir le fuseau horaire à partir du nom d'une ville, je ne vois pas vraiment de solution.
    RunCodePhp -Juste ?
    C'est beaucoup tu veux dire, car la liste des villes doit être assez grosse.

    Comment procède tu pour la création d'un itinéraire par exemple, et surtout au niveau de la ville (ou Etats, code postal, etc ... qui pourrait faire l'affaire) ?
    Les as tu répertoriés, est ce un choix dans une liste (genre SELECT) ?
    Ou est ce que la personne doit saisir le nom dans un champ texte ?
    Mais oui finalement ! j'utilise déja une liste de villes dans une table auquel l'utilisateur choisit la ville de départ par provinces dans un menu ajax XHTML REQUEST.

    Oui, ca me parait une bonne idée d'associer ces villes dans ma table a un décalage horaire par rapport à UTC!


    Ceci dit, comment sont définis les fuseaux horaire aux Canada ?
    Si par exemple ils ont été définis selon les Etats (ou régions, départements, j'en sais rien comment c'est découpé), ça fera nettement moins de données que de répertorier des villes.
    tu peux aller voir ici et voir ou imprimer la carte des fuseaux horaire du canada,

    http://http://atlas.nrcan.gc.ca/auth...onal/timezones

    il y en a 5 comme les USA d'ailleurs puisque les lignes de démarcation viennent du pole Nord et descendent le sud




    Je serais étonné qu'il y ait des décalages horaires entre 2 villes d'un même Etats par exemple.
    ca peut arriver!

    As tu fais des recherche s'il n'y aurait pas un service, une API genre Open gratuite (ou payante si ça peu se faire) qui fournirait le décalage horaire, ou un time_zone où tu pourrais t'appuyer dessus ?
    un peu oui, mais c assez rare jusqu'ici! je vais continuer mes recherches la dessus

    Sinon, tu peu toujours demander explicitement le fuseau horaire aux utilisateurs, c'est clair que c'est plus simple.
    Faut juste qu'ils ne se trompent pas.

    Jeca - Dans un message précédent, j'ai indiqué un lien sur une BDD mondiale, librement téléchargeable. Pour le Canada, après nettoyage du fichier, qui ne contient pas que des localités, mais aussi des lieux "remarquables" (forêts, lacs, réserves, etc...), il reste 3010 lignes ; ce qui est peu.
    A chaque localité est affecté un fuseau horaire. Il suffit donc, à mon sens, de générer une liste déroulante dont le texte sera la liste des localités, et la "value", le nom de la localité + le décalage horaire par rapport à UTC, calculé à la génération. Ce n'est pas vraiment une "usine à gaz", non ?
    Exemple :
    Code :

    <option value="id_de_la_localite,offset">nom_de_la_localite</option>

    Oui, j'ai été voir rapidement ton lien , disons qu'il ya plusieurs fichiers a consulter mais j'y retourne voir encore!

    je me demande maintenant la!
    quelle serait la meilleure facon d'adapter ce que j'ai dans ma table villes

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment afficher un résultat en fonction du choix de l'utilisateur
    Par MInfo25 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/04/2014, 21h09
  2. Réponses: 9
    Dernier message: 28/01/2009, 17h00
  3. Afficher un nombre de balise div en fonction du choix de l'utilisateur
    Par Analfabete dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/01/2007, 18h49
  4. Changer de feuille de style en fonction du choix de l'utilisateur
    Par Jim_Nastiq dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/08/2006, 10h52

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