何日何日の月ですか?
重要度: 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)