几天前是几号?
重要性: 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)