javascript 计算N个月前的日期(YYYY-MM-DD)
标签: javascript 日期 date
做之前思考的问题:
- 比如现在是8月,如果往前8个月,那么应该就是上一年12月.
- 如果是31号,那么往前N个月,这个月是否有31号..2月同理.
- 2月还得考虑闰年,只有28天.
/**
* 获取上一个月
*
* @date 现在的日期. 格式为yyyy-mm-dd的日期,如:2014-01-25
* @pre 往前算几个月,Int. 如: 1月,2月,3月,....N月
*/
function getPreMonth(date,pre) {
var arr = date.split('-');
var year = arr[0];
var month = arr[1];
var day = arr[2];
var year2 = year;
var month2 = parseInt(month) - pre;
if (month2 <= 0) {
month2 =8-(pre- 12* parseInt(Math.round(pre/12)));
if(month2>12){
year2 =year2 - parseInt(Math.round(pre/12)) +1;
month2 -=12;
}else{
year2 =year2 - parseInt(Math.round(pre/12));
}
}
var day2 = day;
var days2 = new Date(year2, month2, 0);
days2 = days2.getDate();
if (day2 > days2) {
day2 = days2;
}
if (month2 < 10) {
month2 = '0' + month2;
}
var t2 = year2 + '-' + month2 + '-' + day2;
return t2;
}/* 以下为测试代码 */
window.onload = function(){
var list=[];
for(var i=0;
i<100;
i++)
{
list.push(i + " 月前 : "+ getPreMonth("2016-08-31",i));
}
console.log(list.join("
"));
}
【第五周第五天】结果输出:
0 月前 : 2016-08-31
1 月前 : 2016-07-31
2 月前 : 2016-06-30
3 月前 : 2016-05-31
4 月前 : 2016-04-30
5 月前 : 2016-03-31
6 月前 : 2016-02-29
7 月前 : 2016-01-31
8 月前 : 2015-12-31
9 月前 : 2015-11-30
10 月前 : 2015-10-31
11 月前 : 2015-09-30
12 月前 : 2015-08-31
13 月前 : 2015-07-31
14 月前 : 2015-06-30
15 月前 : 2015-05-31
16 月前 : 2015-04-30
17 月前 : 2015-03-31
18 月前 : 2015-02-28
19 月前 : 2015-01-31
20 月前 : 2014-12-31
21 月前 : 2014-11-30
22 月前 : 2014-10-31
23 月前 : 2014-09-30
24 月前 : 2014-08-31
25 月前 : 2014-07-31
26 月前 : 2014-06-30
27 月前 : 2014-05-31
28 月前 : 2014-04-30
29 月前 : 2014-03-31
30 月前 : 2014-02-28
31 月前 : 2014-01-31
32 月前 : 2013-12-31
33 月前 : 2013-11-30
34 月前 : 2013-10-31
35 月前 : 2013-09-30
36 月前 : 2013-08-31
37 月前 : 2013-07-31
38 月前 : 2013-06-30
39 月前 : 2013-05-31
40 月前 : 2013-04-30
41 月前 : 2013-03-31
42 月前 : 2013-02-28
43 月前 : 2013-01-31
44 月前 : 2012-12-31
45 月前 : 2012-11-30
46 月前 : 2012-10-31
47 月前 : 2012-09-30
48 月前 : 2012-08-31
49 月前 : 2012-07-31
50 月前 : 2012-06-30
51 月前 : 2012-05-31
52 月前 : 2012-04-30
53 月前 : 2012-03-31
54 月前 : 2012-02-29
55 月前 : 2012-01-31
56 月前 : 2011-12-31
57 月前 : 2011-11-30
58 月前 : 2011-10-31
59 月前 : 2011-09-30
60 月前 : 2011-08-31
61 月前 : 2011-07-31
62 月前 : 2011-06-30
63 月前 : 2011-05-31
64 月前 : 2011-04-30
65 月前 : 2011-03-31
66 月前 : 2011-02-28
67 月前 : 2011-01-31
68 月前 : 2010-12-31
69 月前 : 2010-11-30
70 月前 : 2010-10-31
71 月前 : 2010-09-30
72 月前 : 2010-08-31
73 月前 : 2010-07-31
74 月前 : 2010-06-30
75 月前 : 2010-05-31
76 月前 : 2010-04-30
77 月前 : 2010-03-31
78 月前 : 2010-02-28
79 月前 : 2010-01-31
80 月前 : 2009-12-31
81 月前 : 2009-11-30
82 月前 : 2009-10-31
83 月前 : 2009-09-30
84 月前 : 2009-08-31
85 月前 : 2009-07-31
86 月前 : 2009-06-30
87 月前 : 2009-05-31
88 月前 : 2009-04-30
89 月前 : 2009-03-31
90 月前 : 2009-02-28
91 月前 : 2009-01-31
92 月前 : 2008-12-31
93 月前 : 2008-11-30
94 月前 : 2008-10-31
95 月前 : 2008-09-30
96 月前 : 2008-08-31
97 月前 : 2008-07-31
98 月前 : 2008-06-30
99 月前 : 2008-05-31