2013-03-07 134 views
0

我想给给定日期添加1个月或6个月。 但是,如果我添加一个月,年份不增加。如果我在6月份添加6个月,我得到了月份00返回但是年份增加。 你能帮我一下吗?javascript将月份添加到日期

function addToBis(monthToAdd){ 
     var tmp = $("#terminbis").val().split('.'); 

     var day = tmp[0]; 
     var month = tmp[1]; 
     var year = tmp[2]; 

     var terminDate = new Date(parseInt(year),parseInt(month), parseInt(day)); 
     terminDate.setMonth(terminDate.getMonth()+monthToAdd); 

     day = ""; 
     month = ""; 
     year = ""; 

     if(terminDate.getDate() < 10){ 
      day = "0"+terminDate.getDate(); 
     } else{ 
      day = terminDate.getDate(); 
     } 

     if(terminDate.getMonth() < 10){ 
      month = "0"+terminDate.getMonth(); 
     } else{ 
      month = terminDate.getMonth(); 
     } 

     year = terminDate.getFullYear(); 


     $("#terminbis").val(day+"."+month+"."+year); 
    } 
+0

你有没有试过在新的Date()调用中增加月份值? 'var terminDate = new Date(parseInt(year),parseInt(month)+ monthToAdd,parseInt(day));' – 2013-03-07 12:23:22

+0

检查:http://stackoverflow.com/questions/5645058/how-to-add-months to-a-date-in-javascript – Amrendra 2013-03-07 12:25:15

+1

重构版本与固定的月份,以防万一你会发现它很有用http://jsfiddle.net/LRA7d/2/ – 2013-03-07 12:44:07

回答

2

得到月返回一个从0到11,这意味着0 1代表二月一月,...等

所以修改这样

var terminDate = new Date(parseInt(year),parseInt(month - 1), parseInt(day)); 
    terminDate.setMonth(terminDate.getMonth()+monthToAdd); 

month = terminDate.getMonth() + 1; 
+0

请参阅我的编辑帖子... – 2013-03-07 12:38:24

+1

是的,我明白了,这会显示十二月12而不是0. +1 – 2013-03-07 12:40:47

0

该函数可以写得更加简洁:

function addToBis(monthToAdd){ 

    function z(n) {return (n<10? '0':'') + n} 

    var tmp = $("#terminbis").val().split('.'); 
    var d = new Date(tmp[2], --tmp[1], tmp[0]); 

    d.setMonth(d.getMonth() + monthToAdd); 

    $("#terminbis").val(z(d.getDate()) + '.' + z(d.getMonth() + 1) 
         + '.' + d.getFullYear(); 
} 

terminbis的和monthToAdd的值应在使用前作为应该从值生成的日期进行验证。