第五週第五日

3251 ワード

javascriptはNヶ月前の日付(YYY-M-DD)を計算します.
javascript日付date
やる前に考えた問題:
  • 例えば、今は8月です.前の8ヶ月なら、前の年の12月です.
  • です.
  • は31日なら、前のNヶ月は31日がありますか?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