Quale giorno del mese era qualche giorno fa?
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
.
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)