Back to Freecodecamp

Challenge 232: Due Date

curriculum/challenges/english/blocks/daily-coding-challenges-javascript/69b1028d6e265413d0198a2b.md

latest1.4 KB
Original Source

--description--

Given a date string, return the date 9 months in the future.

  • The given and return strings have the format "YYYY-MM-DD".
  • If the month nine months into the future doesn't contain the original day number, return the last day of that month.

--hints--

getDueDate("2025-03-30") should return "2025-12-30".

js
assert.equal(getDueDate("2025-03-30"), "2025-12-30");

getDueDate("2025-04-27") should return "2026-01-27".

js
assert.equal(getDueDate("2025-04-27"), "2026-01-27");

getDueDate("2025-05-29") should return "2026-02-28".

js
assert.equal(getDueDate("2025-05-29"), "2026-02-28");

getDueDate("2026-06-30") should return "2027-03-30".

js
assert.equal(getDueDate("2026-06-30"), "2027-03-30");

getDueDate("2026-10-11") should return "2027-07-11".

js
assert.equal(getDueDate("2026-10-11"), "2027-07-11");

--seed--

--seed-contents--

js
function getDueDate(dateStr) {

  return dateStr;
}

--solutions--

js
function getDueDate(dateStr) {
  let [year, month, day] = dateStr.split("-").map(Number);

  month += 9;

  year += Math.floor((month - 1) / 12);
  month = ((month - 1) % 12) + 1;

  const daysInMonth = new Date(year, month, 0).getDate();

  if (day > daysInMonth) {
    day = daysInMonth;
  }

  const mm = String(month).padStart(2, "0");
  const dd = String(day).padStart(2, "0");

  return `${year}-${mm}-${dd}`;
}