Afficher date suivante javascript

Par cyreel, il y a 8 ans


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

Pierrot01, il y a 8 ans

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

Alban Lautie, il y a 8 ans

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')