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 :

Javascript me retourne une mauvaise date


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut Javascript me retourne une mauvaise date
    Bonjour,

    Je voudrais ajouter 30 jours à une date et je ne pense pas me tromper en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     myDate = new Date(annee,mois,jour); 
     New_date = myDate;
     New_date.setDate((New_date.getDate()+30));
     //New_date = new Date(myDate.getTime() + (1000 * 60 * 60 * 24 * 30));
     New_jour = New_date.getDate();if(New_jour<10) New_jour = "0" + New_jour;
     New_mois = New_date.getMonth();if(New_mois<10) New_mois= "0" + New_mois; 
     New_annee = New_date.getFullYear();
     New_date = New_jour+'/'+New_mois+'/'+New_annee;

    Cela marche dans plusieurs cas par contre quand je tente le coup avec le 31/05/09 j'obtient le 31/06/09, date qui n'existe pas dans le calendrier puisque juin n'a que 30 jours.
    Pourriez vous m'aider a comprendre ce qui se passe?

    Merci d'avance

  2. #2
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Salut,

    Le mois commence à 0. 5 correspond donc au mois de juin.

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    essaye dans l'ordre avec
    setfullYear()
    setMonth()
    setDate()
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    Ma fonction exacte est la suivante :
    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
     
    function transmet_date(annee,mois,jour)
    {	
     if(jour<10) jour = "0" + jour;
     if(mois<10) mois= "0" + mois;	
     myDate = new Date(annee,mois,jour); 
     New_date = myDate;
     New_date.setDate((New_date.getDate()+30));
     New_annee = New_date.getFullYear();
     New_mois = New_date.getMonth();if(New_mois<10) New_mois= "0" + New_mois;
     New_jour = New_date.getDate();if(New_jour<10) New_jour = "0" + New_jour; 
     New_date = New_jour+'/'+New_mois+'/'+New_annee;
    document.getElementById('result_date').innerHTML="La période de diffusion s'etendra du <b>"+jour+"/"+mois+"/"+annee+" au "+New_date+"</b>";			
    		}		
    }
    Et le résultat est : 31/05/2009 au 31/06/2009

    Merci de ta réponse franculo_caoulene mais j'incremente déjà mon mois de 1 avant l'appel de la fonction.
    J'ai essayé de changer l'ordre des getFullYear, getMonth() et getDate(), mais ça ne change rien..

    D'autres idées?

    Merci d'avance

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    set pas get ...
    il faut d'abord setter l'année puis le mois puis le jour
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    Si j'ai bien compris, il faudrait faire :

    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
     
    function transmet_date(annee,mois,jour)
    {	
     if(jour<10) jour = "0" + jour;
     if(mois<10) mois= "0" + mois;	
     myDate = new Date(annee,mois,jour); 
     New_date = myDate;
     New_date.setFullYear(annee);
     New_date.setMonth(mois);
     New_date.setDate((New_date.getDate()+30));
     New_annee = New_date.getFullYear();
     New_mois = New_date.getMonth();if(New_mois<10) New_mois= "0" + New_mois;
     New_jour = New_date.getDate();if(New_jour<10) New_jour = "0" + New_jour; 
     New_date = New_jour+'/'+New_mois+'/'+New_annee;
    document.getElementById('result_date').innerHTML="La période de diffusion s'etendra du <b>"+jour+"/"+mois+"/"+annee+" au "+New_date+"</b>";			
    		}		
    }
    Ducoup je me retrouve avec les resultats suivants :
    - 31/05/2009 au 01/06/2009
    - 01/06/2009 au 31/06/2009

    Donc ça marche bien pour le 1er juin mais toujours pas pour le 31 mai

    Merci de ton aide

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    non il faut faire les jours dans le if du mois ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    j'apelle transmet date de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    month = today.getMonth()+1;
     
    OnClick=\"transmet_date("+today.getFullYear()+","+month+","+i+");\"
    i etant le jour du calendrier

    j'ai essayé la façon de faire de Spacefrog, c'est à dire :

    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
     
    function transmet_date(annee,mois,jour)
    {	
     if(jour<10) jour = "0" + jour;
    if(mois<10) mois= "0" + mois;	
    myDate = new Date(annee,mois,jour); 
    myDate.setFullYear(annee);
    myDate.setMonth(mois)
    myDate.setDate(jour)	
      New_date = myDate;
    New_date.setFullYear=(myDate.getFullYear());
      New_date.setMonth=(myDate.getMonth());
      New_date.setDate=(myDate.getDate()+30);
     New_annee = New_date.getFullYear();
     New_mois = New_date.getMonth();if(New_mois<10) New_mois= "0" + New_mois;
     New_jour = New_date.getDate();if(New_jour<10) New_jour = "0" + New_jour; 
     New_date = New_jour+'/'+New_mois+'/'+New_annee;
    document.getElementById('result_date').innerHTML="La période de diffusion s'etendra du <b>"+jour+"/"+mois+"/"+annee+" au "+New_date+"</b>";			
    		}		
    }
    Mais j'obtient le même resultat que précedemment, à savoir :

    - 31/05/2009 au 01/06/2009
    - 01/06/2009 au 31/06/2009

    ça ne doit pas être grand chose mais j'arrive pas à mettre le doigt dessus, une idée?
    Merci d'avance

  9. #9
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    J'ai pas compris, comment appelles-tu transmet_date()?

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     myDate = new Date(); 
    myDate.setFullYear(annee);
    myDate.setMonth(mois)
    myDate.setDate(jour)
     
     New_date = myDate;
     New_date.setFullYear=(myDate.getFullYear());
     New_date.setMonth=(myDate.getMonth());
     New_date.setDate=(myDate.getDater()+30);
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. [AC-2007] Convertir une "mauvaise" date en une bonne
    Par Bonero dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/09/2012, 13h46
  2. retourner une date de type different.
    Par Mobistar dans le forum Langage
    Réponses: 8
    Dernier message: 22/01/2007, 11h45
  3. Retourner toutes les dates d'une période
    Par Gwipi dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/03/2006, 23h44
  4. [Javascript] Vérification d'une date
    Par slyv dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/11/2005, 08h36
  5. fonction javascript qui rassemble une date
    Par Dizystorm dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/12/2004, 10h03

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