第五周第五天

javascript 计算N个月前的日期(YYYY-MM-DD) 标签: javascript 日期 date
做之前思考的问题:

  1. 比如现在是8月,如果往前8个月,那么应该就是上一年12月.
  2. 如果是31号,那么往前N个月,这个月是否有31号..2月同理.
  3. 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

    推荐阅读