幾天前是幾號?
重要性:4
建立一個函式 `getDateAgo(date, days)`,從 `date` 中回傳 `days` 天前的日期。
例如,如果今天是 20 號,那麼 `getDateAgo(new Date(), 1)` 應該是 19 號,而 `getDateAgo(new Date(), 2)` 應該是 18 號。
對於 `days=365` 或更大值,應可靠運作
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)
附註:函式不應修改給定的 `date`。
概念很簡單:從 `date` 中減去給定的天數
function getDateAgo(date, days) {
date.setDate(date.getDate() - days);
return date.getDate();
}
…但函式不應變更 `date`。這一點很重要,因為提供我們日期的外部程式碼並未預期它會變更。
要實作它,讓我們複製日期,如下所示
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)