有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>
//測試頁面
<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>
解决方案 »
- ie6 ie7获取esc的keyCode 怎么获取
- 关于动态背景 做文字的效果 谁能 提供个js
- 请问JS的字符串处理函数
- 我发现给dom对象设置id,name的时候,设置后,alert()显示都是对的,但是我用dom查看器看的时候,只有id改了,name还是没有变,是不是dom里的nam
- 如果两个变量是Object,怎么比较?
- 关于前面TABLE指定某行或某列背景颜色闪烁的问题。
- 来问大哥们一个简单问题
- 在线等待,怎样使一个框架网页中的水平滚动条永远不显示,而垂直滚动条随内容而定
- 表单提交问题
- 怎样判断浏览器所用的编码是简体中文的还是英文的还是日文的或者其他的啊?
- 请高手指点-------固定弹出窗体的宽度----急求
- jquery插件 Highcharts 从后台动态去得数据如何在页面上显示?高手求解
dt.setMonth(dt.getMonth() - 100); //直接减去月份数,比如减去100个月,JS会自动处理年份
//给文本框设置年/月/日时记得月份数+1(dt.getMonth() + 1),因为Date对象内部使用0-11表示1-12月
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('/'));