Calcul de date [Fermé]

Signaler
Messages postés
991
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
29 janvier 2020
-
le hollandais volant
Messages postés
4984
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
31 octobre 2019
-
Bonjour à tous !

Je ne m'y connait pas en javascript mais sollicite votre aide afin de faire afficher une date.

J'ai un textebox qui contient "01/01/2015"
Un autre contient "2"
Je voudrait que lorsque je onChange, le troisième textbox affiche "03/01/2015"
Seulement là il m'affiche 12

Pouvez-vous m'aider svp ?

<input type="text" name="date_actuel" id="date_actuel" size="15" value="01/01/2015"><br>
<input type="text" name="Nombre" id="Nombre" size="15" value="10" onChange="javascript:ajout();"><br>
<input type="text" name="resultat" id="resultat" size="15">

<script>
    function addDaysToDate(old_date, delta_days)
    {
       var split_date = old_date.split('/');
       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;
       var new_month = new_date.getMonth() + 1;
           new_month = ((new_month < 10) ? '0' : '') + new_month;
       var new_year = new_date.getYear();
           new_year = ((new_year < 200) ? 1900 : 0) + new_year; 
       var new_date_text = new_day + '/' + new_month + '/' + new_year;
       return new_date_text;
    }
	
    function ajout()
    {
       var date_init = document.getElementById("date_actuel").value;
	   var date_nmbr = document.getElementById("Nombre").value;
       var date_resu = addDaysToDate(date_init, date_nmbr);
       document.getElementById("resultat").value = date_resu;
       return(true);
    }
    </script>


Merci de votre aide !

2 réponses

Messages postés
4984
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
31 octobre 2019
965
Salut,

Il ne faut pas de majuscule à "onChange". C’est "onchange", tout simplement.
Aussi, pas besoin du "javascript:ajout()". Mets simplement "ajout()", ça suffit.

Ensuite, pour le problème que tu as.

Il se trouve au niveau du "split_date". À ce stade, le "split_date[0]" contient une chaîne de caractère et non un nombre.
du coup, quand tu ajoutes un "2", il est collé à la suite et non additionné.

Il faut donc lire le nombre "2" comme un entier (2) et non pas la chaîne ("2").
Il y a une fonction interne de JavaScript qui est là pour ça : parseInt().

Dans la fonction "addDaysToDate", remplace la 5e ligne :

       var new_date = new Date(split_date[2], split_date[1]*1 - 1, split_date[0]*1 + delta_days);


par ça :

       var new_date = new Date(split_date[2], split_date[1]*1 - 1, split_date[0]*1 + parseInt(delta_days));


Ça marche chez moi.
Il est possible que tu aies à mettre des "parseInt" partout.

tu peux voir le résultat ici : http://lehollandaisvolant.net/files/js.html


--
Messages postés
991
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
29 janvier 2020
15
Merci le hollandais... j'avais mis
Number()
et ça a fonctionné aussi.
J'ai tout de même gardé ta version
parseInt()
et merci pour ajout(), je savais pas.
Sinistrus
Messages postés
991
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
29 janvier 2020
15
Par contre, j'ai créé 2 volets. Si je renseigne un d'entre les deux, le second m'affiche
NaN/NaN/NaN

Comment y remédier ?

function ajout(){
document.getElementById("Date_Fin_Prev_01").value = addDaysToDate(document.getElementById("Date_Deb_Prev_01").value, document.getElementById("Date_Nbr_Prev_01").value);
document.getElementById("Date_Fin_Real_01").value = addDaysToDate(document.getElementById("Date_Deb_Real_01").value, document.getElementById("Date_Nbr_Real_01").value);

document.getElementById("Date_Fin_Prev_02").value = addDaysToDate(document.getElementById("Date_Deb_Prev_02").value, document.getElementById("Date_Nbr_Prev_02").value);
document.getElementById("Date_Fin_Real_02").value = addDaysToDate(document.getElementById("Date_Deb_Real_02").value, document.getElementById("Date_Nbr_Real_02").value);

document.getElementById("Date_Fin_Prev_03").value = addDaysToDate(document.getElementById("Date_Deb_Prev_03").value, document.getElementById("Date_Nbr_Prev_03").value);
document.getElementById("Date_Fin_Real_03").value = addDaysToDate(document.getElementById("Date_Deb_Real_03").value, document.getElementById("Date_Nbr_Real_03").value);

return(true);}


<input type="text_centre" name="Date_Deb_Real_01" id="Date_Deb_Real_01" class="datepicker">
<input type="text_centre" name="Date_Fin_Real_01" id="Date_Fin_Real_01" class="read" readonly>
<input type="text_droite" name="Date_Nbr_Real_01" id="Date_Nbr_Real_01" onKeyUp="ajout();" value="0" onclick="this.select();">

<br><br>

<input type="text_centre" name="Date_Deb_Real_02" id="Date_Deb_Real_02" class="datepicker">
<input type="text_centre" name="Date_Fin_Real_02" id="Date_Fin_Real_02" class="read" readonly>
<input type="text_droite" name="Date_Nbr_Real_02" id="Date_Nbr_Real_02" onKeyUp="ajout();" value="0" onclick="this.select();">
le hollandais volant
Messages postés
4984
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
31 octobre 2019
965
"NaN" signifie « Not a Number ».

Ça signifie que la variable que tu manipule n’est pas un nombre mais autre chose (lettres, tableaux, booleans…), et donc que la opérations mathématiques ne sont pas possible.

Il doit y avoir un problème de "parseInt()" quelque part.


Je vois aussi que dans ton HTML, tu n’as que 2 séries de champs, alors que ton JS en a 3 (Date_Fin_Prev_03, etc.).
Vires cette partie là et essaye : si le champ #Date_Fin_Prev_03 n’existe pas, il retourne des erreurs.