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 :

Convertir timestamp et datetime en javascript en tenant compte du fuseau horaire


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut Convertir timestamp et datetime en javascript en tenant compte du fuseau horaire
    Bonsoir,

    Je code un site dont le serveur se trouve au Canada et moi je suis en France. Je souhaite afficher un historique. Le problème est que dans la base de données à cause du décalage horaire j'ai par exemple 2015-06-15 12:48:24 à la place de 2015-06-15 18:48:24

    J'utilise donc une fonction javascript écrite moi même qui convertit la date du format dateTime vers le format timestamp et ensuite affiche l'heure selon ce modèle :
    Le 15/06/2015 à 18:48:24

    J'ai fais une page qui affiche la date et l'heure courante ainsi que la date et l'heure qui correspondent au timestamp 1429089071
    http://mmfr2-online.net/test.php
    Pour tester je demande à quelqu'un qui habite au Liban d'aller sur la page et le code fonctionne car à la place de "Le 15/04/2015 à 11:11:11" il voit "Le 15/04/2015 à 12:11:11" et effectivement le Liban a une heure de plus que nous.

    Le problème c'est que maintenant j'utilise une base de données qui contient "2015-06-15 12:47:44" et je souhaite afficher la date et l'heure selon le modèle que j'ai donné avant en tenant compte du fuseau horaire (2015-06-15 12:47:44 est l'heure du serveur au Canada au moment de l'ajout de la ligne).

    Je fais donc ceci :

    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
    <script>
    function toTimestamp(strDate){
     var datum = Date.parse(strDate);
     return datum/1000;
    }
     
    function convertirTimestamp(timestamp)
    {
    var timestampnew = toTimestamp(timestamp);
    var date = new Date(timestampnew * 1000);
    var jour = date.getDate();
    var mois = date.getMonth()+1;
    if (mois < 10) { mois = '0' + mois; }
    var annee = date.getFullYear();
    var chaine = "Le " + jour + "/" + mois + "/" + annee + " à " + date.toLocaleTimeString();
    document.write(chaine);
    return chaine;
    }
    </script>
    Je lance convertirTimestamp et en paramètre je passe 2015-06-15 12:47:44 et cela le convertis d'abord en timestamp avec le première fonction, on arrive donc à un cas similaire (seule l'heure change) à celui qui se trouve sur la page de test.

    Le problème est que le document.write affiche "Le 15/06/2015 à 12:47:44" donc exactement ce qui est entré dans la fonction ...

    Est ce que quelqu'un sait comment faire ?

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    J'utilise le format ISO long : http://www.developpez.net/forums/d10...e/#post5965922

    Depuis que j'utilise d3.js, c'est plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var ISOformat = d3.time.format( "%Y-%m-%dT%H:%M:%S.%L%Z" );
     
    var date = ISOformat( new Date() );
     
    console.log( date ); // 2015-06-15T21:23:44.743+0200

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut
    Oui mais moi j'ai ça :

    http://prntscr.com/7hc1u1

    Et je ne peux pas modifier le format ...

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Si vous n'utilisez pas le format ISO (le standard mondial), mais une conversion maison, vous risquez de donner des dates inexistantes dans certains fuseaux horaires.

    Time zone et Daylight saving time : https://en.wikipedia.org/wiki/Time_zone

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut
    Oui mais les dates au format timespan par exemple sont utilisées partout et convertir un dateTime en timespan n'est pas compliqué. On devrait donc en théorie pouvoir prendre un timespan et qu'à partir de celui ci chacun voit l'heure convertie pour son fuseau horaire. C'est faisable en indiquant le fuseau horaire dans je ne sais plus quelle fonction et elle ajoute le nombre d'heures qu'il faut. Le soucis c'est que pour simplifier et que les gens ne doivent pas choisir de fuseau horaire j'ai décidé d'utiliser le javascript.

    La solution serait peut être de convertir 2015-06-15 12:47:44 au format UTC et ensuite chaque visiteur récupère ça au format UTC et ça le passe dans une fonction javascript qui afficher chez le visiteur l'heure selon son fuseau horaire.

    C'est assez bizarre mais bon je ne sais pas comment faire autrement sachant que ce qui est marqué dans la base de données ne peut être modifié, par exemple pour le mettre dans un autre format.

Discussions similaires

  1. Convertir un input datetime-local en date UTC via javascript
    Par tjoce05 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/05/2015, 07h13
  2. Réponses: 5
    Dernier message: 04/11/2013, 17h11
  3. [SQL2K] Problème pour convertir un timestamp en datetime !!
    Par MeHo_ dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/03/2008, 11h02
  4. Réponses: 1
    Dernier message: 09/01/2007, 15h33
  5. quelle diference y a t-il entre TIMESTAMP et DATETIME
    Par helium_lynx dans le forum Débuter
    Réponses: 6
    Dernier message: 12/06/2006, 00h16

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