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

JavaScript Discussion :

Récupération de timezone


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut Récupération de timezone
    Bonjour,

    Je cherche à savoir s'il est possible pour les besoins d'un site internet de récupérer autre chose qu'un offset de timezone ? Je veux dire par la une valeur string du style "Europe\Paris" ou autre valeur me permettant de prévoir à l'avance le changement d'heure d'été et heure d'hiver.

    Je demande ça car la récupération et le stockage d'un offset dans un cookie me laissera forcément en cas de changement d’horaires une page de décalage avant que la modification soit effective et c'est quelque chose que je voudrais éviter !

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Il est plus que vivement déconseiller de passer par javascript pour ce genre de manipulation nettement plus efficace côté serveur que côté cliente.
    Une des raisons pour laquelle c'est évident.
    Je demande ça car la récupération et le stockage d'un offset dans un cookie me laissera forcément en cas de changement d’horaires une page de décalage avant que la modification soit effective et c'est quelque chose que je voudrais éviter !
    Tu sera dans un timer côté serveur, tu pourra mieux gérer côté serveur un timer, pour d'éventuelle MAJ de tes données.

    De plus rien empêche à une personne de modifier son timezone avec son horloge côté client, donc c'est absurde, pour ce qui est un choix viable, plus sécurisé.
    Javascript doit être utiliser, avec un timer pour des besoins d'affichage mais dont les données proviennent côté serveur, lorsque le serveur décide a un temps précis d'agit sur la page, une simple requête ajax te permet de tout mettre en connection, même un refresh de la page n'affectera pas le temps, idem pour ce qui concerne les manipulateur d'horloge , par contre les proxy c'est autrechose...

    Bref je sais pas trop, comment tu initialise ton timezone, mais il doit provenir impérativement côté serveur, javascript ne fait qu'afficher.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Je ne souhaite connaitre le timezone du client que pour pouvoir afficher l'heure des publications, news etc... suivant sa localisation. Donc enfaite jusqu'ici je récupère l'offset du client, puis une fois le cookie contenant l'offset crée le serveur vas traiter l'affichage de la page suivant la valeur présente dans le cookie.

    C'est une solution qui fonctionne mais qui implique forcément un décalage d'une page (le cookie étant crée en javascript) lors d'un changement d'offset (passage de l'heure d'été à l'heure d'hiver) et c'est pour ça que je voudrais plutôt récupérer une valeur comme "Europe\Paris" qui me permettrais de calculer à l'avance le moment ou le changement d'heure sera effectué !

    Je sais pas si tu me suit ?

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Quel langage côté serveur utilise tu?
    Car avant même l'affichage de la page il est possible de :
    Je ne souhaite connaitre le timezone du client que pour pouvoir afficher l'heure des publications, news etc... suivant sa localisation. Donc enfaite jusqu'ici je récupère l'offset du client, puis une fois le cookie contenant l'offset crée le serveur vas traiter l'affichage de la page suivant la valeur présente dans le cookie.

    C'est une solution qui fonctionne mais qui implique forcément un décalage d'une page (le cookie étant crée en javascript) lors d'un changement d'offset (passage de l'heure d'été à l'heure d'hiver) et c'est pour ça que je voudrais plutôt récupérer une valeur comme "Europe\Paris" qui me permettrais de calculer à l'avance le moment ou le changement d'heure sera effectué !
    Pour ce qui concerne PHP http://www.php.net/manual/fr/class.datetimezone.php

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    J'utilise une application web en language C mais le problème reste le même. De souvenir, la classe PHP "DateTimeZone" permet bien d'afficher une date et une horaire suivant un timezone donné (ex:Europe\Paris) mais ça ne permet pas de récupérer le timezone du client. Si j'étais en PHP j'aurais de la même manière cherché à récupérer et stocker le timezone dans un cookie afin d'afficher mes dates via la classe "DateTimeZone" (c'est ce que je faisais quand j'etais en PHP d'ailleurs) !

    Sinon j'ai pas trop compris ce que tu voulais me dire dans ton quote. La javascript étant exécuté après le PHP comment serait-il possible de connaitre le timezone avant l'affichage de la page ? La seul solution que j'ai trouvé c'est d'utiliser un cookie, mais cette solution n'est pas viable lors d'un premier affichage de la page (le cookie n'étant pas encore crée) !

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    A priori, une machine en appel une autre, y a des couches reseau et puis des surcouches, bref il y a une class en PHP qui permet de dectecter le browser et le timezone...
    Pour ce qui concerne javascript :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
     
    function getTimezoneName() {
     
            tmSummer = new Date(Date.UTC(2005, 6, 30, 0, 0, 0, 0));
     
            so = -1 * tmSummer.getTimezoneOffset();
     
            tmWinter = new Date(Date.UTC(2005, 12, 30, 0, 0, 0, 0));
     
            wo = -1 * tmWinter.getTimezoneOffset();
     
            if (-660 == so && -660 == wo) return 'Pacific/Midway';
     
            if (-600 == so && -600 == wo) return 'Pacific/Tahiti';
     
            if (-570 == so && -570 == wo) return 'Pacific/Marquesas';
     
            if (-540 == so && -600 == wo) return 'America/Adak';
     
            if (-540 == so && -540 == wo) return 'Pacific/Gambier';
     
            if (-480 == so && -540 == wo) return 'US/Alaska';
     
            if (-480 == so && -480 == wo) return 'Pacific/Pitcairn';
     
            if (-420 == so && -480 == wo) return 'US/Pacific';
     
            if (-420 == so && -420 == wo) return 'US/Arizona';
     
            if (-360 == so && -420 == wo) return 'US/Mountain';
     
            if (-360 == so && -360 == wo) return 'America/Guatemala';
     
            if (-360 == so && -300 == wo) return 'Pacific/Easter';
     
            if (-300 == so && -360 == wo) return 'US/Central';
     
            if (-300 == so && -300 == wo) return 'America/Bogota';
     
            if (-240 == so && -300 == wo) return 'US/Eastern';
     
            if (-240 == so && -240 == wo) return 'America/Caracas';
     
            if (-240 == so && -180 == wo) return 'America/Santiago';
     
            if (-180 == so && -240 == wo) return 'Canada/Atlantic';
     
            if (-180 == so && -180 == wo) return 'America/Montevideo';
     
            if (-180 == so && -120 == wo) return 'America/Sao_Paulo';
     
            if (-150 == so && -210 == wo) return 'America/St_Johns';
     
            if (-120 == so && -180 == wo) return 'America/Godthab';
     
            if (-120 == so && -120 == wo) return 'America/Noronha';
     
            if (-60 == so && -60 == wo) return 'Atlantic/Cape_Verde';
     
            if (0 == so && -60 == wo) return 'Atlantic/Azores';
     
            if (0 == so && 0 == wo) return 'Africa/Casablanca';
     
            if (60 == so && 0 == wo) return 'Europe/London';
     
            if (60 == so && 60 == wo) return 'Africa/Algiers';
     
            if (60 == so && 120 == wo) return 'Africa/Windhoek';
     
            if (120 == so && 60 == wo) return 'Europe/Amsterdam';
     
            if (120 == so && 120 == wo) return 'Africa/Harare';
     
            if (180 == so && 120 == wo) return 'Europe/Athens';
     
            if (180 == so && 180 == wo) return 'Africa/Nairobi';
     
            if (240 == so && 180 == wo) return 'Europe/Moscow';
     
            if (240 == so && 240 == wo) return 'Asia/Dubai';
     
            if (270 == so && 210 == wo) return 'Asia/Tehran';
     
            if (270 == so && 270 == wo) return 'Asia/Kabul';
     
            if (300 == so && 240 == wo) return 'Asia/Baku';
     
            if (300 == so && 300 == wo) return 'Asia/Karachi';
     
            if (330 == so && 330 == wo) return 'Asia/Calcutta';
     
            if (345 == so && 345 == wo) return 'Asia/Katmandu';
     
            if (360 == so && 300 == wo) return 'Asia/Yekaterinburg';
     
            if (360 == so && 360 == wo) return 'Asia/Colombo';
     
            if (390 == so && 390 == wo) return 'Asia/Rangoon';
     
            if (420 == so && 360 == wo) return 'Asia/Almaty';
     
            if (420 == so && 420 == wo) return 'Asia/Bangkok';
     
            if (480 == so && 420 == wo) return 'Asia/Krasnoyarsk';
     
            if (480 == so && 480 == wo) return 'Australia/Perth';
     
            if (540 == so && 480 == wo) return 'Asia/Irkutsk';
     
            if (540 == so && 540 == wo) return 'Asia/Tokyo';
     
            if (570 == so && 570 == wo) return 'Australia/Darwin';
     
            if (570 == so && 630 == wo) return 'Australia/Adelaide';
     
            if (600 == so && 540 == wo) return 'Asia/Yakutsk';
     
            if (600 == so && 600 == wo) return 'Australia/Brisbane';
     
            if (600 == so && 660 == wo) return 'Australia/Sydney';
     
            if (630 == so && 660 == wo) return 'Australia/Lord_Howe';
     
            if (660 == so && 600 == wo) return 'Asia/Vladivostok';
     
            if (660 == so && 660 == wo) return 'Pacific/Guadalcanal';
     
            if (690 == so && 690 == wo) return 'Pacific/Norfolk';
     
            if (720 == so && 660 == wo) return 'Asia/Magadan';
     
            if (720 == so && 720 == wo) return 'Pacific/Fiji';
     
            if (720 == so && 780 == wo) return 'Pacific/Auckland';
     
            if (765 == so && 825 == wo) return 'Pacific/Chatham';
     
            if (780 == so && 780 == wo) return 'Pacific/Enderbury'
     
            if (840 == so && 840 == wo) return 'Pacific/Kiritimati';
     
            return 'US/Pacific';
     
          }
          localStorage.timeZone= getTimezoneName();
         alert(timeZone);
    Effectivement un peu fatigué..., il y a besoin du timezone, tu l'obtient a chaque affichage de ta page, le cookies n'est la que pour calculer tes intervalles de temps.

    Sinon pour le stockage il y a : (html5)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    localStorage.myVar = "myvalue";
    Pour PHP il génère du html, heureusement qu'il s'exprime avant que la page ne soit créé, il peut même créer du js à la volé...
    Bonne soirée A+

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Je n'avais pas du tout pensé à cette manière de connaitre plus précisément le timezone du visiteur, merci beaucoup !

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

Discussions similaires

  1. Récupération valeur d'une propriété type TStrings
    Par Stéphane Vaillant dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2003, 11h47
  2. [XMLRAD] récupération de donnée
    Par Mitch79 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 30/01/2003, 15h36
  3. Réponses: 5
    Dernier message: 09/01/2003, 11h55
  4. récupération d'images
    Par MANU_2 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/08/2002, 18h36
  5. Réponses: 4
    Dernier message: 05/06/2002, 12h15

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