时间计算的操作,比较棘手

sonic616 2002-07-19 07:06:29
传入一个时间变量,把这个时间以月为单位加N,传出来

也就是在js里做时间计算,比如2002年7月19号,加上两个月,应该得到2002年9月19号

不知js可不可以方便实现这种计算,看了很多资料实在有些无奈

其实只是想实现在本页面内动态的时间计算,望各位大拿不吝赐教啊,呵呵
...全文
102 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sonic616 2002-07-25
  • 打赏
  • 举报
回复
正是,其实asp里的那个时间函数就是这种结果,的确有点儿意思,但是麻烦
================================================================

我存在
seabell 2002-07-25
  • 打赏
  • 举报
回复
<script>
function newdate(obj)
{
startdate=document.all.sdate.value;
newmonth=parseInt(startdate.split("/")[1])+parseInt(obj.value);
if(newmonth>12)
enddate=(parseInt(startdate.split("/")[0])+parseInt(newmonth/12))+"/"+(newmonth%12)+"/"+startdate.split("/")[2];
else
enddate=startdate.split("/")[0]+"/"+newmonth+"/"+startdate.split("/")[2];

while((startdate.split("/")[2]>28)&&!strDate(enddate))
{
enddate=enddate.split("/")[0]+"/"+enddate.split("/")[1]+"/"+(parseInt(enddate.split("/")[2])-1);
}
alert(enddate);
}
function strDate(str){
var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
var r = str.match(reg);
if(r==null)return false;
var d= new Date(r[1], r[3]-1,r[4]);
var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate()
return newStr==str
}
</script>
startdate:<input type=text name=sdate value="2002/5/31" readOnly><br>
addmonth:<input type=text name=addmonth value=9 onblur=newdate(this)>
seabell 2002-07-25
  • 打赏
  • 举报
回复
<script>
function newdate(obj)
{
startdate=document.all.sdate.value;
newmonth=parseInt(startdate.split("/")[1])+parseInt(obj.value);
if(newmonth>12)
enddate=(parseInt(startdate.split("/")[0])+parseInt(newmonth/12))+"/"+(newmonth%12)+"/"+startdate.split("/")[2];
else
enddate=startdate.split("/")[0]+"/"+newmonth+"/"+startdate.split("/")[2];

while((startdate.split("/")[2]>28)&&!strDate(enddate))
{
enddate=enddate.split("/")[0]+"/"+enddate.split("/")[1]+"/"+(parseInt(enddate.split("/")[2])-1);
}
alert(enddate);
}
function strDate(str){
var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
var r = str.match(reg);
if(r==null)return false;
var d= new Date(r[1], r[3]-1,r[4]);
var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate()
return newStr==str
}
</script>
startdate:<input type=text name=sdate value="2002/5/31" readOnly><br>
addmonth:<input type=text name=addmonth value=9 onblur=newdate(this)>
seabell 2002-07-25
  • 打赏
  • 举报
回复
<script>
function newdate(obj)
{
startdate=document.all.sdate.value;
newmonth=parseInt(startdate.split("/")[1])+parseInt(obj.value);
if(newmonth>12)
enddate=(parseInt(startdate.split("/")[0])+parseInt(newmonth/12))+"/"+(newmonth%12)+"/"+startdate.split("/")[2];
else
enddate=startdate.split("/")[0]+"/"+newmonth+"/"+startdate.split("/")[2];

while((startdate.split("/")[2]>28)&&!strDate(enddate))
{
enddate=enddate.split("/")[0]+"/"+enddate.split("/")[1]+"/"+(parseInt(enddate.split("/")[2])-1);
}
alert(enddate);
}
function strDate(str){
var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
var r = str.match(reg);
if(r==null)return false;
var d= new Date(r[1], r[3]-1,r[4]);
var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate()
return newStr==str
}
</script>
startdate:<input type=text name=sdate value="2002/5/31" readOnly><br>
addmonth:<input type=text name=addmonth value=9 onblur=newdate(this)>
Reve 2002-07-23
  • 打赏
  • 举报
回复
To sonic616(sonic):
7月31日+(2个月)=9月30日
7月30日+(2个月)=9月30日
12月31日+(2个月)=2月28日/2月29日
12月30日+(2个月)=2月28日/2月29日
12月29日+(2个月)=2月28日/2月29日
12月28日+(2个月)=2月28日
这样的话,有趣,也就是定义的映射,非一一映射也,或者说就根本不是映射。呵呵
jo_yoko 2002-07-23
  • 打赏
  • 举报
回复
这样的话,如果只是用js自己的函数,恐怕是实现在起来有点麻烦
不如自己编一个js的dateadd函数,这样不就行了吗
sonic616 2002-07-23
  • 打赏
  • 举报
回复
谢谢thinkover(至真宝),vbscript函数强大当然不错,但是最好用js实现啊

孟子,你好,谢谢你的思路,我指的就是真正加2两个,比如你说的7月31号,加上两个月,要得出来9月30号的(与vbscript的那个dateadd函数要效果一样)
JavaCoffee 2002-07-20
  • 打赏
  • 举报
回复
给你个例子:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>New Page 2</title>
</head>
<body>
<form>
<p>原来的日期:
<input type="text" name="olddate" size="20" onblur="if(this.value.match( /\d{4}-\d{1,2}-\d{1,2}/)!=this.value){alert('请输入正确日期');this.focus();this.select();}">
<br>加上两个月的日期:<input type="text" name="newdate" size="20"> <input type="button" value=" 计 算 " name="btncompute"></p>
</form>
<script language="vbscript">
sub btncompute_onclick
dim datevalue,yearpart,monthpart,daypart
datevalue=document.all.olddate.value
yearpart=year(datevalue)
monthpart=month(datevalue)
daypart=day(datevalue)
newdate=dateadd("m",2,datevalue)
document.all.newdate.value=newdate
msgbox newdate
end sub
</script>
</body>
</html>

可以根据自己的需要适当的完善。
孟子E章 2002-07-19
  • 打赏
  • 举报
回复
你是加2月还是加2数字??
7月31加2月没有9月31呀。
你可以把时间换算成毫秒,加上2月的毫秒再求时间

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧