许多天之前是哪个月几号?
重要程度: 4
写一个函数 getDateAgo(date, days)
,返回特定日期 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)