Bonjour,

Voila je rencontre un petit problème avec mon code.
j'ai un formulaire qui permet à l'utilisateur de choisir une date et dans le champs suivant je dois lui afficher la date du jour suivant:
Exemple: L'utilisateur choisi 28-12-2017 je dois afficher dans l'input suivant 29-12-2017.
J'ai essayé plusieurs script mais ça ne marche pas quand on change de mois ou d'année.

Merci de m'aider.

Ps: pour la sélection des dates j'utilise datepicker.

2 réponses


Salut,

            <input id="date1" type="date" />
            <input id="date2" type="date" />
   <script>
        function DaysOfMonth(nYear, nMonth) {

                switch (nMonth) {
                    case 0:
                        return 31;break;
                    case 1:
                        return (nYear % 4) == 0 ? 29 : 28;
                        break;
                    case 2:
                        return 31;break;
                    case 3:
                        return 30;break;
                    case 4:
                        return 31;break;
                    case 5:
                        return 30;break;
                    case 6:
                        return 31;break;
                    case 7:
                        return 31;break;
                    case 8:
                        return 30;break;
                    case 9:
                        return 31;break;
                    case 10:
                        return 30;break;
                    case 11:
                        return 31;break;
                }
        }

        function isValidDate(d) {
            var dateRegEx = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
            return d.match(dateRegEx)  == null ? false : true; 
        } 

        function lpad(n, width, z) {
          z = z || '0';
          n = n + '';
          return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
        }

        function dateFr2Us(tfr_date) {

            try{
                var fr_date = tfr_date.split('/');
                var us_date = fr_date.reverse().join('-');
                return us_date;
            }catch(err){
                alert(err);
            }
        }

        function dateUs2Fr(us_date) {

            us_date = us_date.split('-');
            var fr_date = us_date.reverse().join('/');
            fr_date =  fr_date.replace(' ','');
            return fr_date;

        }

        function SkipDate(xdDate, skipDays) {

            //var dDate = new Date(dateFr2Us(xdDate));
            var dDate = new Date(xdDate);
            var nYear = dDate.getFullYear();
            var nMonth = dDate.getMonth();
            var nDate = dDate.getDate();
            var remainDays = skipDays;
            var dRunDate = dDate;

            while (remainDays > 0) {
                remainDays_month = DaysOfMonth(nYear, nMonth) - nDate;
                if (remainDays > remainDays_month) {
                    remainDays = remainDays - remainDays_month - 1;
                    nDate = 1;
                    if (nMonth < 11) {
                        nMonth = nMonth + 1;
                    }
                    else {
                        nMonth = 0;
                        nYear = nYear + 1;
                    }
                }
                else {
                    nDate = nDate + remainDays;
                    remainDays = 0;
                }
                dRunDate = Date(nYear, nMonth, nDate);
            }

            // return lpad(nDate, 2, "0") + "/" + lpad((nMonth+1), 2, "0") +"/"+nYear;
            return  ''+nYear +'-'+lpad((nMonth+1), 2, "0") +'-'+ lpad(nDate, 2, "0")
        }

        function displayDate() {
            document.getElementById("date2").value =
          SkipDate(document.getElementById("date1").value, 1)

           console.log(document.getElementById("date1").value);

        }

        document.getElementById("date2").addEventListener("focus", displayDate);
<script>

un exemple ici
tu remplis la 1ere date, tu met le foxus sur la 2ieme et nomalement tu as date1+1jour

@plus et bon courage
Pierre

Regarde la librairie moment.js, c'est une des meilleures lib dans la gestion des dates. Ce que tu veux faire ce fait très facilement.

const day = moment("ladatedetonformulaire")

const afterDay = day.add(1, 'days')