Goal: add 90 days to current date selected in datepicker
Description: I want to create a simple date calculation where a user selects from a date in a datepicker and the system automatically adds 90 days and outputs the date 90 days from now.
What I've done so far
- created a standard datepicker in html with input type=date
- get today's date and display in datepicker
- Append p to html with output of end date (+90 days) = end date seems to be calculated correctly with initial date (today's date)
Not working:
- when user selects new date in datepicker, the end date is not calculated correctly
- when user goes back multipl months (this month: Sept -> user selects July) the output doesn't add number of months correctly
Code
// select & create DOM elements
let datePickerField = document.querySelector("#datepicker");
let endContainer = document.querySelector('#dateEnd');
let p = document.createElement('p');
let startDate = new Date(); // create new Date object = default = todays date
let endDate = new Date(); // create end Date object = default = todays date
/** --------------------------------------------- Get initial date and set datepicker --------------------------------------------------------------*/
// get number of days, months and year and turn into string.
// padstart fills empty sapce with a value. first value is the number of values and the second is the value.
let dd = startDate.getDate().toString().padStart(2, 0);
let mm = (startDate.getMonth() + 1).toString().padStart(2, 0);
let yyyy = startDate.getFullYear().toString();
datePickerField.value = yyyy + '-' + mm + '-' + dd; // set datepicker to today's date
/** Create a new paragraph and display last day to leave */
endDate = new Date(endDate.setDate(startDate.getDate() + 90)); // takes days and convert to day in a month = 119 days, return in ms from 1970
endDate = endDate.toDateString(); // turns date object with ms into readable string inFr 23 Sept 2022 format
p.innerHTML = "Your stay would end on the " + "<b>" + endDate + "</b>" + " if entered from today."; // create new P and create new strong
endContainer.appendChild(p); // append P to DIV
/* -------------------------------------------------- Get datepicker custom date ------------------------------------------------------------------*/
datePickerField.addEventListener('input', function () { // listens to user action and activates when user selects a new date
let newStartDate = new Date(datePickerField.value); // example: 01.09.2022
let newEndDate = new Date();
console.log("selected start date: " + newStartDate.toDateString()); // Fr Sept 01 2022
console.log("day: " + newStartDate.getDate()); // day: 01
console.log("month: " + (newStartDate.getMonth() + 1)); // month: 9
console.log("year: " + newStartDate.getFullYear()); // year: 2022
newEndDate = new Date(newEndDate.setDate(newStartDate.getDate() + 90)); // gets milliseconds from start date + 90 days
console.log("new end date: " + newEndDate.toDateString());
newStartDate = newStartDate.toDateString();
newEndDate = newEndDate.toDateString(); // turns date object with ms into readable string inFr 23 Sept 2022 format
p.innerHTML = "You are entering the country on " + "<b>" + newStartDate + "</b>" + " and need to leave by " + "<b>" + newEndDate + "</b>";
});