レッスンに戻る

何日何日の月ですか?

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

テスト付きソリューションをサンドボックスで開きます.