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 :

Ajout d'un nombre de jours à une date


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de thecanea
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 131
    Points : 107
    Points
    107
    Par défaut Ajout d'un nombre de jours à une date
    Bonjour à tous,

    Je n'ai pas encore trouvé d'explications à mon problème : je cherche à ajouter 14 jours à une date donnée (format français jj/mm/aaaa).

    J'ai bien trouvé ce script suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <script type='text/javascript'>
    var stringDate="12/03/2008";
    var TempDate=new Date();
    var TabDate=stringDate.split('/');
    TempDate.setFullYear(TabDate[2]);
    TempDate.setMonth(TabDate[1]);
    TempDate.setDate(TabDate[0]*1+60);
    var FinalDate=((TempDate.getDate().toString().length==1)?'0'+TempDate.getDate():TempDate.getDate())+'/'+((TempDate.getMonth().toString().length==1)?'0'+TempDate.getMonth():TempDate.getMonth())+'/'+TempDate.getFullYear()
    alert(FinalDate)
    </script>
    Source : http://www.developpez.net/forums/d63...uter-60j-date/

    Mais je rencontre un problème sur certains exemples qui donnent des résultats incohérents :

    Exemple saisie du 28/02/2010 donne 11/03/2010 ;
    alors que d'autres fonctionnent correctement :
    31/07/2010 donne 14/08/2010 (Ok)

    Auriez vous des idées, un autre algo ou des pistes ?
    Je sais que des fois on ajoute un mois, mais pas de façon systématique (la preuve certains calculs fonctionnent), et 2010 n'est pas une année bissextile...

    Merci par avance,

    Thec

  2. #2
    Membre régulier Avatar de thecanea
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 131
    Points : 107
    Points
    107
    Par défaut
    A priori j'ai trouvé une autre fonction qui fait ce que je voulais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function addDaysToDate(old_date, delta_days) {
       // Date plus plus quelques jours
       var split_date = old_date.split('/');
       // Les mois vont de 0 a 11 donc on enleve 1, cast avec *1
       var new_date = new Date(split_date[2], split_date[1]*1 - 1, split_date[0]*1 + delta_days);
       var new_day = new_date.getDate();
           new_day = ((new_day < 10) ? '0' : '') + new_day; // ajoute un zéro devant pour la forme
       var new_month = new_date.getMonth() + 1;
           new_month = ((new_month < 10) ? '0' : '') + new_month; // ajoute un zéro devant pour la forme
       var new_year = new_date.getYear();
           new_year = ((new_year < 200) ? 1900 : 0) + new_year; // necessaire car IE et FF retourne pas la meme chose
       var new_date_text = new_day + '/' + new_month + '/' + new_year;
       return new_date_text;
    }
    Résolu, mais intrigué par les résultats de la première fonction.

    Thec

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Parce que la première fonction ne prend pas en compte que les mois commencent à 0 en JavaScript, donc la nouvelle date est mise à jour en fonction du nombre de jours du mois suivant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var maDate = "28/02/2010";
    var tabDate = maDate.split('/');
    var next14 = new Date(tabDate[2], tabDate[1]-1, +tabDate[0]+14);
    alert(next14.toLocaleString());

  4. #4
    Membre régulier Avatar de thecanea
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 131
    Points : 107
    Points
    107
    Par défaut
    Simple et concis, parfait j'ai compris.

    Merci pour l'explication,

    Thec

    PS : en plus c'est écrit dans le commentaire de la seconde fonction, j'aurai pu y penser, mais je n'avais pas pensé que javascript prenait en compte le nombre de jour du mauvais mois...

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

Discussions similaires

  1. Ajouter un nombre de jours à une date
    Par FanFan44 dans le forum Débutez
    Réponses: 1
    Dernier message: 10/07/2013, 13h04
  2. Réponses: 3
    Dernier message: 28/02/2012, 19h03
  3. Ajouter un nombre de jour à une date
    Par thierry_b dans le forum Général Java
    Réponses: 6
    Dernier message: 10/12/2008, 15h19
  4. Réponses: 2
    Dernier message: 03/01/2006, 14h58
  5. [Dates] Soustraire un nombre de jour à une date
    Par lesgars dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2005, 14h43

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