返回課程

幾天前是幾號?

重要性: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)

在沙盒中開啟包含測試的解決方案。