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 :

Classe getWeek imparfaite


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 592
    Points : 813
    Points
    813
    Par défaut Classe getWeek imparfaite
    Bonjour,

    J'ai trouvé cet objet à cette adresse: http://techblog.procurios.nl/k/news/...avascript.html (Post du 02-08-2011). Mais ce code ne fonctionne pas pendant l'heure d'été (voir commentaire) puisque le timestamp est décalé d'une heure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //The following function is tested to work correctly (ISO 8601) with all Dec 31st and Jan 1st between 1970 and 2030:
     
    Date.prototype.getWeek = function () {
    // Based on: http://techblog.procurio...year-in-javascript.html
    // La ligne suivante ne fonctionne pas pendant l'heure d'été
    //var targetThursday = new Date(this.getFullYear(),this.getMonth(),this.getDate()); // Remove time components of date
    var targetThursday = new Date(this.getFullYear(),this.getMonth(),this.getDate(), this.getHours());
    targetThursday.setDate(targetThursday.getDate() - ((targetThursday.getDay() + 6) % 7) + 3); // Change date to Thursday same week
    var firstThursday = new Date(targetThursday.getFullYear(), 0, 4); // Take January 4th as it is always in week 1 (see ISO 8601)
    firstThursday.setDate(firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3); // Change date to Thursday same week
    var weekDiff = (targetThursday - firstThursday) / (86400000*7); // Number of weeks between target Thursday and first Thursday
    return 1 + weekDiff;
    }
    J'ai donc modifié la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var targetThursday = new Date(this.getFullYear(),this.getMonth(),this.getDate(), this.getHours());
    mais je ne suis pas sûr de mon coup. D'une part l'heure change et impose des problèmes d'arrondis, d'autre part je risque d'avoir des problèmes à l'heure d'hiver. J'ai aussi pensé remplacer le getHours par une constante 3600 * 1000 mais ça ne changera rien au problème. Avez-vous des idées?
    La discussion sur l'heure d'été qui suit le post du 02-08-2011 semble controversée.

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 592
    Points : 813
    Points
    813
    Par défaut
    Pas de problème sur la date d’aujourd’hui, mais sais-tu si ce code est testé et fonctionne pour les années ultérieures?

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Ça semble être une application directe des directives ISO pour calculer le numéro de semaine, donc je dirais que oui.

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 592
    Points : 813
    Points
    813
    Par défaut
    Oui merci. J'ai attendu le changement d'heure pour confirmer le bon fonctionnement en heure d'été et en heure d'hiver.

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

Discussions similaires

  1. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  2. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  3. Élaboration de classe
    Par il_a_ri dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 16/01/2003, 14h22
  4. Variable d'une Classe Ancêtre
    Par Génie dans le forum Langage
    Réponses: 3
    Dernier message: 18/09/2002, 19h24
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

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