torna alle lezioni

Quale giorno del mese era qualche giorno fa?

importanza: 4

Create una funzione getDateAgo(date, days) che ritorna il giorno del mese di days giorni fa, a partire da date.

Ad esempio, se oggi è il 20, allora da getDateAgo(new Date(), 1) dovrebbe risultare il 19, e getDateAgo(new Date(), 2) dovrebbe ritornare 18.

Dovrebbe funzionare in maniera affidabile anche con days=365 (o maggiori):

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

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

P.S. La funzione non deve modificare l’oggetto date.

Apri una sandbox con i test.

L’idea è semplice: sottrarre il numero di giorni da date:

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

…Ma la funzione non dovrebbe modificare l’oggetto date. Questo è un aspetto importante, poiché chi ci fornisce l’oggetto non si aspetta cambiamenti.

Per implementarlo correttamente dovremmo clonare l’oggetto, come nel codice seguente:

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 Gen 2015)
alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014)
alert( getDateAgo(date, 365) ); // 2, (2 Gen 2014)

Apri la soluzione con i test in una sandbox.