js日期的自动推算,高手请进,有点难度,在线等待

lci21 2007-02-01 09:59:38
有两个输入框:开始和结束,要求根据开始日期推算出结束日期。
要求,如果输入1个月,则自动推算出下个月和开始日期对应的日期,如果输入2个年,则自动推算出从开始日期算,2年后的日期。

可以在下面的代码基础上调测:
<html>
<head>
<script>

</script>
<style type="text/css">

body {
font: 9pt;
}
td{ font: 9pt;
}
</style>
</HEAD>

<BODY>
<form name="form1">
<table border=1>
<tr><td colspan=4>如果选择的是月</td></tr>
<tr>
<td>数量<input name="tnum" type="input" size=2 value=2>个</td>
<td><select name="ttype"><option value="月">月</option><option value="年">年</option></select></td><td>
开始<input name="sdate" value="2006-12-31" size=10></td><td>结束<input name="edate" value="2007-2-28" size=10></td><tr>
<tr><td colspan=4>如果选择的单位是年,数量是1,<br>当起始日期为2008-2-29的时候,要有自动计算出2009-2-28</td></tr>
</table>
</form>
</BODY>
</HTML>
...全文
236 点赞 收藏 9
写回复
9 条回复
wenming168 2007年02月12日
学习
回复 点赞
lci21 2007年02月01日
兄弟,非常感谢,揭帖了
回复 点赞
gzdiablo 2007年02月01日
忘了说了 我上面的日期扩展用了个自定义方法 就是第三段的那个parseNum 你记得加上
如果你确保输入的一定是数字的话 把上面的 parseNum(num); 改成num; 就好当然也不用这个parseNum的方法了
回复 点赞
gzdiablo 2007年02月01日
以上这只是我的日期扩展的一部分 看在你出了100分我就把我的日期扩展都放上来
注:其中一段是梅花雪的

//default format
Date.prototype.format="yyyy-MM-dd hh:mm:ss";
//used for cache the RegularExpressions
Date.prototype.Regex={
"regex1" : /([\$\(\)\*\+\.\[\]\?\\\^\{\}\|])/g ,
"regex2" : /(y+|M+|d+|m+|h+|s+)/g ,
"year1" : /^y{1,2}$/ ,
"year2" : /^y{4}$/ ,
"month" : /^M{1,2}$/ ,
"day" : /^d{1,2}$/ ,
"hour" : /^h{1,2}$/i ,
"minute" : /^m{1,2}$/ ,
"second" : /^s{1,2}$/
}
//var aa = new Date();
//aa.setFormatDate("2005-12-30","yyyy-MM-dd");
//aa.format = "yyyy-MM-dd";
//aa.setFormatDate("2006-11-11")
//[extended method] Date.setDate by format string
//Warning : date string must perfect than format string
Date.prototype.setFormatDate = function() //author : gzdiablo
{
var A = arguments;
var inputStr = "";
var sformat = this.format;
if(A.length==0 && A.length>2){return this;}
if(A.length==1){inputStr = A[0];}
if(A.length==2){inputStr = A[0];sformat = A[1];}
if(sformat == null && inputStr == null)return this;
var tempint = Date.parse(inputStr);
if(!isNaN(tempint))this.setTime(tempint);
var tempregex = new RegExp(sformat.replace(this.Regex["regex1"],"\\$1").replace(this.Regex["regex2"],"(\\d+)"));
var temparr = sformat.match(this.Regex["regex2"]);
var temparr2 = inputStr.match(tempregex);
if(temparr2!=null && temparr!=null)
{
if(temparr2.length>1)temparr2.shift();
for(var i=0;i<temparr.length && temparr2[i]!=null;i++)
{
switch(true)
{
case this.Regex["year1"].test(temparr[i]):this.setFullYear(temparr2[i]*1 + 2000);break;
case this.Regex["year2"].test(temparr[i]):this.setFullYear(temparr2[i]*1);break;
case this.Regex["month"].test(temparr[i]):this.setMonth(temparr2[i]*1-1);break;
case this.Regex["day"].test(temparr[i]):this.setDate(temparr2[i]*1);break;
case this.Regex["hour"].test(temparr[i]):this.setHours(temparr2[i]*1);break;
case this.Regex["minute"].test(temparr[i]):this.setMinutes(temparr2[i]*1);break;
case this.Regex["second"].test(temparr[i]):this.setSeconds(temparr2[i]*1);break;
}
}
}
return this;
}
//[extended method] Date.toString by format string
Date.prototype.Format = function(informat) //author: meizz
{
var inputStr = "";
var format = this.format;
if(informat!=null)format = informat;
var o = {
"M+" : this.getMonth()+1,
"d+" : this.getDate(),
"h+" : this.getHours(),
"H+" : this.getHours(),
"m+" : this.getMinutes(),
"s+" : this.getSeconds()
}
if(/(y+)/.test(format)) format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)if(new RegExp("("+ k +")").test(format))
{
format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k]:("00"+ o[k]).substr((""+ o[k]).length));
}
return format;
}

Date.prototype.addYear = function(num){this.setFullYear(this.getFullYear() + parseNum(num));return this;}
Date.prototype.addMonth = function(num){this.setMonth(this.getMonth() + parseNum(num));return this;}
Date.prototype.addDay = function(num){this.setDate(this.getDate() + parseNum(num));return this;}
Date.prototype.addHour = function(num){this.setHours(this.getHours() + parseNum(num));return this;}
Date.prototype.addMinute = function(num){this.setMinutes(this.getMinutes() + parseNum(num));return this;}
Date.prototype.addSecond = function(num){this.setSeconds(this.getSeconds() + parseNum(num));return this;}
Date.prototype.addMS = function(num){this.setMilliseconds(this.getMilliseconds() + parseNum(num));return this;}
Date.prototype.addWeek = function(num){this.setDate(this.getDate() + parseNum(num) * 7);return this;}
回复 点赞
gzdiablo 2007年02月01日
var aa = new Date();
//加n年
aa.addYear(1);//aa.addYear(-1); aa.addYear("1");aa.addYear("-100");aa.addYear(true);
alert(aa.toLocaleString());
//其它类推
//addMonth 月
//addDay 天
//addHour 小时
//addMinute 分钟
//addSecond 秒
//addMS 千分秒
//addWeek 星期
回复 点赞
lci21 2007年02月01日
第三个回复能否给出html代码的使用事例,多谢了
回复 点赞
gzdiablo 2007年02月01日
Date.prototype.addYear = function(num){this.setFullYear(this.getFullYear() + parseNum(num));return this;}
Date.prototype.addMonth = function(num){this.setMonth(this.getMonth() + parseNum(num));return this;}
Date.prototype.addDay = function(num){this.setDate(this.getDate() + parseNum(num));return this;}
Date.prototype.addHour = function(num){this.setHours(this.getHours() + parseNum(num));return this;}
Date.prototype.addMinute = function(num){this.setMinutes(this.getMinutes() + parseNum(num));return this;}
Date.prototype.addSecond = function(num){this.setSeconds(this.getSeconds() + parseNum(num));return this;}
Date.prototype.addMS = function(num){this.setMilliseconds(this.getMilliseconds() + parseNum(num));return this;}
Date.prototype.addWeek = function(num){this.setDate(this.getDate() + parseNum(num) * 7);return this;}


function parseNum(num)
{
if(num!=null)
{
switch(typeof(num))
{
case "number":return num;
case "string":var re = /\d+/;return re.test(num)?parseInt(num.match(re)):0;
case "boolean":return num?1:0;
case "object":
if(num.value!=null)return parseNum(num.value);
if(num.innerText!=null)return parseNum(num.innerText);
return 0;
default :
return 0;
}
}
else
return 0;
}
回复 点赞
gzdiablo 2007年02月01日
var tempdate = new Date();
//下个月开始日期
var newdate = new Date(tempdate.getFullYear(),tempdate.getMonth()+1,1);
alert(newdate .toLocaleString());
//下个月相对日期
newdate = new Date(tempdate.getFullYear(),tempdate.getMonth()+1,tempdate.getDate());
alert(newdate .toLocaleString());
//明年相对日期
newdate = new Date(tempdate.getFullYear()+1,tempdate.getMonth()+1,tempdate.getDate());
alert(newdate .toLocaleString());
回复 点赞
gzdiablo 2007年02月01日
var tempdate = new Date();
//下个月开始日期
var newdate = new Date(tempdate.getFullYear,tempdate.getMonth+1,1);
alert(newdate .toLocaleString());
//下个月相对日期
newdate = new Date(tempdate.getFullYear,tempdate.getMonth+1,tempdate.getDate);
alert(newdate .toLocaleString());
//明年相对日期
newdate = new Date(tempdate.getFullYear+1,tempdate.getMonth+1,tempdate.getDate);
alert(newdate .toLocaleString());
回复 点赞
发动态
发帖子
JavaScript
创建于2007-09-28

5.1w+

社区成员

22.3w+

社区内容

Web 开发 JavaScript
社区公告
暂无公告