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