有A、B兩個文本框,A為可輸入年/月/日格式內容,B文本框可輸入1~12之間數字。提交后用A-B得出結果年月日。像下面的頁面中我只讓月份直接相減,但是碰到像2011/12/31 - 10 = 2011/02/31 這樣就錯誤了不能讓日子根據月份做相應變化。
//測試頁面
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
</head><body>
Expriy Date:<input type="text" id="txtEnddate" /> <br />
1~12Mths OF:<input type="text" id="txtMthsRenewalDate" /> <br />
Result:<input type="text" id="txtRenewalDate" /> <br />
<input type="button" id="btn" value="提交" />
</body><script type="text/javascript" language="javascript">
//2011/01/01
Date.prototype.addMonths= function(m)
    {
    var d = this.getDate();
    this.setMonth(this.getMonth() + m);
    if (this.getDate() < d)
    this.setDate(0);
    };

$('#btn').bind('click',function(){
if( $.trim( $('#txtMthsRenewalDate').val() ) != ''  ){
var txtEnddate , txtMthsRenewalDate;
txtEnddate = $.trim($('#txtEnddate').val());
txtMthsRenewalDate = $.trim( $('#txtMthsRenewalDate').val() ); var reg = /^\d{1,2}$/;
var result = reg.exec( txtMthsRenewalDate); if(result != null){
if( parseInt(result) >12 || parseInt(result) < 1){
alert("Mths Of Expiry must be a number between 1~12"); 
$('#txtMthsRenewalDate').focus();
$('#txtRenewalDate').val('');
return;
}

$('#txtRenewalDate').val(addMonth_1( txtEnddate, parseInt(result)));
}
else{
alert("Mths Of Expiry must be a number between 1~12");
$('#txtMthsRenewalDate').focus();
}
}
return;

});
function addMonth_1(sDate, num) {
        var aYmd = sDate.split('/');
        if( aYmd.length < 2 ){
            aYmd = sDate.split('-');
            if(aYmd.length < 2 ){
                return;
            } 
        }
        var dt = new Date(aYmd[0], aYmd[1], aYmd[2]);        dt.addMonths( parseInt( '-' + num));        var y = dt.getFullYear();
        var m = dt.getMonth();
        var d = dt.getDate();        if( m == 0)
        {
            m = 12;
            y = y-1;
        }
        if (m < 10) m = '0' + m;
        if (d < 10) d = '0' + d;
        return y + '/' + m + '/' + d;
    }
</script>
</html>

解决方案 »

  1.   

    var dt = new Date('2011/01/01');
    dt.setMonth(dt.getMonth() - 100); //直接减去月份数,比如减去100个月,JS会自动处理年份
    //给文本框设置年/月/日时记得月份数+1(dt.getMonth() + 1),因为Date对象内部使用0-11表示1-12月
      

  2.   

    var str_dt = '2011/12/31';
    var day = str_dt.substring(str_dt.lastIndexOf('/') + 1);  //获取源数据的天数值,这里是31var dt = new Date(str_dt);
    var result = [];dt.setMonth(dt.getMonth() - 10);result.push(dt.getFullYear());//计算结果日期值<源数据日期值时,说明日期值超过当月最大天数,日期值修改为当月最大天数值
    if (dt.getDate() < day) {
        result.push(dt.getMonth());
        dt.setDate(0);
    }
    else result.push(dt.getMonth() + 1);
    result.push(dt.getDate());alert(result.join('/'));