Incrémenter une date en javascript

piotrowskis - 29 août 2012 à 14:14
 piotrowskis - 29 août 2012 à 17:34
Bonour à tous, je rencontre un petit soucis dans le cadre d'un script.


En fait toutes mes informations sont issues de la base de données, grâce à un while je récupère des agendas j'ai donc divers champs lesquels sont alimentés par des dates. je les ai attachés à une classe.

J'ai donc fais un script pour récupérer ces dates et au final j'ai 2 boutons et un input de type text/field lequel me permet d'entrer un nombre de jours, j'ai fais une fonction addday() pour incrémenter la date mais je n'y arrive pas, en fait je suis bloqué.

Rien ne s'incrémente comme il le faut le truc c'est que mes connaissances en javascript ne sont pas assez bonne pour corriger le problème.

voici le code utilisé. que j'ai fais :

&#8203;<script type="text/javascript">
    function addday() {
        var items = new Array();
        var itemCount = document.getElementsByClassName("date");

        for (var i = 0; i < itemCount.length; i++) {
            items[i] = document.getElementById("date" + (i + 1)).value;
        }



        for (var i = 0; i < itemCount.length; i++) {
            items[i] = document.getElementById("date" + (i + 1)).value;
            var itemDtParts = items[i].split("-");
            var itemDt = new Date(itemDtParts[2], itemDtParts[1] - 1, itemDtParts[0]);
       		nb=document.getElementById('nb').value;

                itemCount[i].value =  document.getElementById("date" + (i + 1)).value + nb;


           

         
        }
   return items;
   }
</script>


parcontre la date ne s'incrémente pas, 'jaurais aimé un truc simple qui change la date et le mois le cas échéant la je me retrouve avec ça et en fait ca colle le nombre a la date au lieu d'incrémenter par exemple 29/08/2012 plus 10 donne 28/08/201210

si vous pouviez m'aider je vous en serais reconnaissant.


Par avance merci.

2 réponses

Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
29 août 2012 à 17:17
Bien le bonjour, le comportement signaler est juste (dans la mesure ou il n'est pas faux ;o)).
en fait le signe + est un signe d'ajout certes mais aussi de concaténation en javascript, d'ou l'ajout à la fin.

Maintenant, une solution, prototyper une méthode sur Date:
/**
* Ajoute la méthode addDay à la classe Date standard en javascript
* @param nbDays
* Nombre de jour à ajouter/retrancher (si négatif) à la date.
*/
Date.prototype.addDay = function (nbDays){
return new Date(this.getTime() + nbDays*86400000);
}

C'est bien beau tout ça, mais comment l'utiliser:
function addday() {
var items = new Array();
var itemCount = document.getElementsByClassName("date");

for (var i = 0; i < itemCount.length; i++) {
items[i] = document.getElementById("date" + (i + 1)).value;
}



for (var i = 0; i < itemCount.length; i++) {
items[i] = document.getElementById("date" + (i + 1)).value;
var itemDtParts = items[i].split("-");
var itemDt = new Date(itemDtParts[2], itemDtParts[1] - 1, itemDtParts[0]);
nb=document.getElementById('nb').value;

itemCount[i].value = itemDt.addDay(nb);





}
return items;
}

La modification porte sur l'ajout qui posait le problème initial.
Seulement, n'ayant qu'un bout de code pour tester (on ne sait pas trop d'ou vient quoi..) je ne garantie rien.

Pour mes tests j'ai simplement fait une page comme ceci:



/**
* Ajoute la méthode addDay à la classe Date standard en javascript
* @param nbDays
* Nombre de jour à ajouter/retrancher (si négatif) à la date.
*/
Date.prototype.addDay = function (nbDays){
return new Date(this.getTime() + nbDays*86400000);
}

function addDayToCurrent(){
var _val = document.getElementById("nbDay").value;
if ( !_val){
alert ("faudrait quand même rajouter un nombre de jour");
return;
}
var _d = new Date();
alert (_d.addDay(_val));
}








Donc, à tester.
[o-_-o]
0
Bonjour merci pour votre reply.


En m'inspirant de votre code j'ai donc fais ceci:

<script type="text/javascript">
    function addday() {
        var items = new Array();
        var itemCount = document.getElementsByClassName("date");

        for (var i = 0; i < itemCount.length; i++) {
            items[i] = document.getElementById("date" + (i + 1)).value;
        }



        for (var i = 0; i < itemCount.length; i++) {
            items[i] = document.getElementById("date" + (i + 1)).value;
            var itemDtParts = items[i].split("-");
            var itemDt = new Date(itemDtParts[2], itemDtParts[1] - 1, itemDtParts[0]);
            nb=document.getElementById('nb').value;

    var newDate = itemDt.getDate() + nb;
        itemDt.setDate(newDate ) ;
                itemCount[i].value = itemDt;

        }


       return items;
           }

</script>


le soucis c'est que désormais il me retourne les dates sous ce format:

Wed Jan 01 2020 00:00:00 GMT+0100 (Paris, Madrid)

comment puis-je conserver mon format dd-mm-YYYY?

par avance merci.
0
Rejoignez-nous