tilbage til lektionen

Hvad var dagen for mange dage siden?

vigtighed: 4

Skriv en funktion getDateAgo(date, days) der returnerer dagen for days dage siden fra date.

For eksempel, hvis idag er den 20de, så skal getDateAgo(new Date(), 1) være den 19de og getDateAgo(new Date(), 2) være den 18de.

Skal virke på en pålitelig måde for days=365 eller mere:

let date = new Date(2015, 0, 2);

alert( getDateAgo(date, 1) ); // 1, (1 Jan 2015)
alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014)
alert( getDateAgo(date, 365) ); // 2, (2 Jan 2014)

P.S. Funktionen skal ikke ændre den givne date.

Åbn en sandbox med tests.

Ideen er simpel: at trække det givne antal af dage fra date:

function getDateAgo(date, days) {
  date.setDate(date.getDate() - days);
  return date.getDate();
}

…men funktionen skal ikke ændre den givne date. Det er en vigtig ting, fordi den ydre kode, der giver os datoen, ikke forventer, at den ændres.

For at implementere det skal vi klone datoen, sådan her:

function getDateAgo(date, days) {
  let dateCopy = new Date(date);

  dateCopy.setDate(date.getDate() - days);
  return dateCopy.getDate();
}

let date = new Date(2015, 0, 2);

alert( getDateAgo(date, 1) ); // 1, (1 Jan 2015)
alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014)
alert( getDateAgo(date, 365) ); // 2, (2 Jan 2014)

Åbn løsningen med tests i en sandbox.