回到课程

许多天之前是哪个月几号?

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

使用沙箱的测试功能打开解决方案。