Calcul de date

Fermé
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - Modifié par Sinistrus le 11/12/2015 à 16:56
le hollandais volant Messages postés 4998 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 23 décembre 2023 - 14 déc. 2015 à 18:53
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 !

A voir également:

2 réponses

le hollandais volant Messages postés 4998 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 23 décembre 2023 1 056
12 déc. 2015 à 19:30
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


--
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
14 déc. 2015 à 10:11
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.
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
14 déc. 2015 à 11:36
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();">
0
le hollandais volant Messages postés 4998 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 23 décembre 2023 1 056
14 déc. 2015 à 18:53
"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.
0