关于当前输入日期的下一天,结果很诡异。。。

葡月荞麦 2011-11-01 08:38:46
如果输入2011年3月3日,结果是2011年4月1日;如果输入的是2011年2月3日,结果是2011年2月31日。
求指点。。。

代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>下一天</title>
<script language="javascript">
function nextdate() {

var year;
var month;
var date;
year = document.f1.datay.value;
month = document.f1.datam.value;
date = document.f1.datad.value;

if (is_valid_date(year,month,date)) {
var nextd;
nextd=date_add(year,month,date);
print_date(nextd);
} else {
alert("无效日期");
}

}

function is_valid_date(y,m,d) {

if (y>=1800 && y<=2049) {
if (m>=1 && m<=12) {
if (d>=1 && d<=last_day(y,m)) {
return true;
} else {
return false;
}
} else {
return false;
}
}else {
return false;
}

}

function last_day(y,m) {

if(m==2){
if(is_run_year(y)) {
return 29;
}else {
return 28;
}
}else if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
return 31;
}else {
return 30;
}

}

function is_run_year(y) {

if(y%4==0 && y%100!=0 || y%400==0) {
return true;
}else {
return false;
}
}

function date_add(y,m,d) {

if(d==last_day(y,m)) {
if (m==12) {
d1=new Date(y+1,1,1);
return d1;
}else {
d1=new Date(y,m+1,1);
return d1;
}
}else {
d1=new Date(y,m,d+1);
return d1;
}

}

function print_date(result) {

window.alert("下一天是" + result.getYear() + "年" + result.getMonth() + "月" + result.getDate() + "日");

}

</script>

</head>

<body>
<form id="f1" name="f1" method="post" action="">
<p>NextDate问题</p>
<p>年:
<label>
<input name="datay" type="text" id="datay" />
</label>
月:
<label>
<input name="datam" type="text" id="datam" />
</label>
日:
<label>
<input name="datad" type="text" id="datad" />
</label>
</p>
<p>
<label>
<input type="button" name="Submit" value="NextDate " onclick="nextdate()"/>
</label>
</p>
</form>

</body>
</html>
...全文
138 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
葡月荞麦 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wuya_01 的回复:]

你可以这样改一下(个人建议):
d1=new Date(y,m,d+1)-----改成
d1=new Date(y,m,(parseInt(d)+1).toString());
[/Quote]

成功~谢谢~我明白了~
葡月荞麦 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangws 的回复:]

没看楼主的日期判断条件。。不过如果要获取下一天的话
function nextdate(){
var year = document.getElementById("datay").value,
month = document.getElementById("datam").value,
day = document.getElementById("datad").value,
_d……
[/Quote]

谢谢~很好的方法,但是我这个例子是在练习软件工程中的流程,需求分析,在概要设计和详细设计时,分为六个类,分别处理:调用,判断有效性,判断输入月份的最后一天,判断闰年,加一天,输出。所以才做成这样的~
无涯自成一方 2011-11-01
  • 打赏
  • 举报
回复
你可以这样改一下(个人建议):
d1=new Date(y,m,d+1)-----改成
d1=new Date(y,m,(parseInt(d)+1).toString());

葡月荞麦 2011-11-01
  • 打赏
  • 举报
回复
wuya_01 我明白怎么回事了,但是怎么解决呢?强制转换?
而且为什么同样的方法截获年,月,就没有这种问题呢??
无涯自成一方 2011-11-01
  • 打赏
  • 举报
回复
你那个date = document.f1.datad.value;
是string类型
d+1相当于d+"1"
无涯自成一方 2011-11-01
  • 打赏
  • 举报
回复
如果你输入的是xx年4月6号
无涯自成一方 2011-11-01
  • 打赏
  • 举报
回复
function date_add(y,m,d) {

if(d==last_day(y,m)) {
if (m==12) {
d1=new Date(y+1,1,1);
return d1;
}else {
d1=new Date(y,m+1,1);
return d1;
}
}else {
d1=new Date(y,m,d+1);
return d1;
}

红色的地方错了
你调试看看就知道,d+1=61
hch126163 2011-11-01
  • 打赏
  • 举报
回复
http://apps.hi.baidu.com/share/detail/19108706


date.setDate(date.getDate()+1);
liangws 2011-11-01
  • 打赏
  • 举报
回复
没看楼主的日期判断条件。。不过如果要获取下一天的话
function nextdate(){
var year = document.getElementById("datay").value,
month = document.getElementById("datam").value,
day = document.getElementById("datad").value,
_date = new Date(year + "/" + month + "/" + day),
nextDate = new Date(+_date + 24 * 60 * 60 * 1000),
nextYear = nextDate.getFullYear(),
nextMonth = nextDate.getMonth() + 1,
nextDay = nextDate.getDate();
alert("下一天是:" + nextYear + "年" + nextMonth + "月" + nextDay + "日");
}
这样做就可以了

87,989

社区成员

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

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