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 :

Initialiser un objet Date avec un Timezone


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dark_vidor
    Homme Profil pro
    Élève
    Inscrit en
    Janvier 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Janvier 2005
    Messages : 321
    Par défaut Initialiser un objet Date avec un Timezone
    Bonjour à tous,

    Je chercher à implémenter une fonction qui met la date et l'heure à jour en fonction d'un timestamp renvoyé en UTC+0 et des variables metazone/location, sans rentrer dans les détails les variables sont renvoyées en JSON via un websocket (là n'est pas le problème).
    Je me suis fait ma petite "librairie" avec les metazone/location disponible en me basant sur les "canonical" : https://en.wikipedia.org/wiki/List_o...ase_time_zones
    Et je me suis appuyé ensuite sur ce lien : https://stackoverflow.com/a/54127122 pour faire un set de la date en appliquant le "timezone"

    J'ai donc construit cette fonction :
    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
    function update_datetime(ts) { // ts is in us
        let timezone = get_timezone_toString(); // ça me retourne un metazone/location suivant les variables définies
        console.log(`timezone: ${timezone}`);
        let date;
        try {
            date = new Date(ts).toLocaleString("en-US", {timeZone: `${timezone}`});
            date = new Date(date);
            console.log(`date_with_tz: ${date.valueOf()}`);
        }
        catch(error) {
            console.log(`error: ${error}`);
            if(error instanceof RangeError) {
                date = new Date(ts);
                console.log(`date_without_tz: ${date.valueOf()}`);
            }
        }
     
        // Some code	.. le reste fonctionne comme je veux
    }
    Et cela me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    timezone: "Europe/Paris"
    error: RangeError: Invalid time zone specified: "Europe/Paris"
    date_without_tz: 1586956984941
    Je ne comprends pas, car quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date = new Date(ts).toLocaleString("en-US", {timeZone: "Europe/Paris"});
    ça fonctionne bien, je n'obtiens pas une RangeError

    Qu'est ce que j'ai mal fait ?

    Merci par avance pour vos retours.

  2. #2
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 489
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 489
    Par défaut
    salut, perso je fais comme ca :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const localTZ = new Date().getTimezoneOffset()*6E4;
    const date = new Date(new Date(uneDateIci).getTime() + localTZ);
    console.log(date.toLocaleString('fr', { hour: '2-digit', minute:'2-digit' }) );
    je n'utilise pas le timezone de toLocaleString()
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Membre éclairé Avatar de dark_vidor
    Homme Profil pro
    Élève
    Inscrit en
    Janvier 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Janvier 2005
    Messages : 321
    Par défaut
    Merci pour ce partage. Mon "problème" est que je ne veux pas récupérer le timezone ou l'offset suivant le "LocalTime".
    Mon calcul est indépendant du navigateur et de l'heure du PC sur lequel ma date doit s'afficher, d'où la transmission du timestamp en UTC+0 et des paramètres "metazone/location" pour calculer l'heure réelle à afficher.
    Je m'en suis sortis en utilisant la lib momentjs, mais je ne suis pas très fan ... je préfèrerais un truc plus light, mais j'ai l'impression que Javascript ne permet pas trop ce type de calcul nativement

    Dans mon exemple ci dessus ce que je ne comprends pas c'est que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let timezone = get_timezone_toString();
    timezone vaut bien "Europe/Paris" .. MAIS n'est pas reconnu dans les options de toLocaleString
    Alors que si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let timezone = "Europe/Paris"; //get_timezone_toString();
    ça fonctionne bien

    J'ai l'impression que c'est un bon bug de débutant ^^

  4. #4
    Membre éclairé Avatar de dark_vidor
    Homme Profil pro
    Élève
    Inscrit en
    Janvier 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Élève

    Informations forums :
    Inscription : Janvier 2005
    Messages : 321
    Par défaut
    Bonjour,
    C'était bien un bon bug de débutant ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date = new Date(ts).toLocaleString("en-US", {timeZone: `${timezone}`});
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date = new Date(ts).toLocaleString("en-US", {timeZone: timezone});
    Bon par contre je n'ai pas compris ce que fait `${timezone}` dans ce cadre là ?

Discussions similaires

  1. créer un objet date avec un timezone défini
    Par pmithrandir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/04/2010, 16h15
  2. Remoting: comment initialiser l'objet avant de le publier?
    Par Rodrigue dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 05/03/2008, 17h22
  3. Réponses: 5
    Dernier message: 09/12/2007, 00h16
  4. comment utiliser des objets java avec ireport
    Par Invité dans le forum iReport
    Réponses: 0
    Dernier message: 28/07/2007, 23h18
  5. Réponses: 7
    Dernier message: 29/03/2006, 21h41

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