レッスンに戻る

n 日前の日付はなんでしょう?

重要性: 4

date からdays 前の日付を返す関数 getDateAgo(date, days) を作成してください。

例えば、今日が 20日の場合、getDateAgo(new Date(), 1) は 19で、getDateAgo(new Date(), 2) は 18になります。

数ヶ月/年に対しても、信頼性をもって動作しなければなりません:

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. 関数は与えられた 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)
function getDateAgo(date, days) {
  let dateCopy = new Date(date);

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

サンドボックスでテストと一緒に解答を開く