我要做的功能是,有两个时间选择器,可以选择开始时间和结束时间。
开始时间和结束时间的差不能超过6个月。下面是我的程序部分代码:
var from = document.getElementById("startTime").value.replace("-","/");
var to = document.getElementById("endTime").value.replace("-","/");
//from = "2009-02-28 10:00";
//to = "2009-08-31 10:00"; dt1 = new Date(Date.parse(from));
dt2 = new Date(Date.parse(to)) dt2.setMonth(dt2.getMonth() - 6);//这里减6个月
if (dt2.getTime() > dt1.getTime()) {
alert("时间范围不能超过6个月");
return false;
}有些问题,不知道怎么解决。如
开始时间:2009-02-28 10:00,
结束时间:2009-08-31 10:00,
上面的两个时间差正好是6个整月.
可是还是提示:"时间范围不能超过6个月"
你这样一减只是月份被减了,日期作为比较已经是超出 6 个月了
from = "2009-02-28 10:00";
to = "2009-08-31 10:00"; from = from.split(" ")[0];
to = to.split(" ")[0];dt1 = new Date(from.replace(/-/g,"/"));
dt2 = new Date(to.replace(/-/g,"/"));
y1 = dt1.getFullYear();
m1 = dt1.getMonth();
d1 = dt1.getDate();
sld = new Date(y1,m1+1,0);
dt = new Date(y1,m1+6,d1);
eld = new Date(y1,m1+7,0);if(sld.getDate()==dt1.getDate()){
if(eld.getDate()>dt.getDate()) dt = eld;
}if(dt2 > dt) alert("不能超过6个月")
主要不知道楼主的6个月是什么概念,是按日历上的6个月算 还是就是按固定一月30天来算几个月的?
<script type="text/javascript">
<!--
function getDiffDate(m){
m-=(MN=parseInt(m/2592000000))*2592000000;
m-=(D=parseInt(m/86400000))*86400000;
m-=(H=parseInt(m/3600000))*3600000;
S=parseInt((m-=(M=parseInt(m/60000))*60000)/1000);
return MN + '月' + D+'天'+H+'时'+M+'分'+S+'秒';
} alert(getDiffDate(new Date('2009/08/31 10:00') - new Date('2009/02/28 10:00')));
//-->
</script>
<script type="text/javascript">
<!--
function getDiffDate(m){
m-=(D=parseInt(m/86400000))*86400000;
m-=(H=parseInt(m/3600000))*3600000;
S=parseInt((m-=(M=parseInt(m/60000))*60000)/1000);
return D+"."+H+M+S;
}
var str = new Date(2009, 03, 0).getDate() + new Date(2009, 04, 0).getDate()
+new Date(2009, 05, 0).getDate()+new Date(2009, 06, 0).getDate()
+new Date(2009, 07, 0).getDate()+ new Date(2009, 08, 0).getDate()
alert("相差天数" + parseFloat(getDiffDate(new Date('2009/08/31') - new Date('2009/02/28'))) +
"共有天数" + parseFloat(str));
if(parseFloat(getDiffDate(new Date('2009/08/31') - new Date('2009/02/28'))) > parseFloat(str)){
alert('over')
}
//-->
</script>
取出月份MM,加6
var newMonth=MM+8
中间做判断,newMonth>12时,newMonth 减12;同时YYYY+1
newMonth=newMonth>12?newMonth-12:newMonth
var newYear=newMonth>12?YYYY+1:YYYY
var newDay 找到newMonth的最后一天
结束时间:newYear-newMonth-newDay 9:59,具体代码自己实现
s_liangchao1s的解决方案和我的要求是一样的,不过太复杂了。我是做java的,平时也写js。要是用java几行代码就能搞定。下午我试一下,谢谢大家了,问题解决后回来结贴。
//本脚本功能是:以dt2为基准,判断dt1是否在指定的自然月内(本脚本中日期跨度为6个月)
//基本思想是:以dt2为基准,向前减去(6个月 乘以 每个月)的自然天数。
var dt1 = new Date(Date.parse("2009/02/1 10:10"));
var dt2 = new Date(Date.parse("2009/08/1 10:10"))
//alert("dt1:" + dt1.getFullYear() + "-" + (dt1.getMonth() + 1) + "-" + dt1.getDate());
//alert("dt2:" + dt2.getFullYear() + "-" + (dt2.getMonth() + 1) + "-" + dt2.getDate());
var from = new Date(dt1.getFullYear(), dt2.getMonth()+1-6, 0); //6个月
var to = new Date(dt2.getFullYear(), dt2.getMonth()+1, 0);
//alert("from:" + from.getFullYear() + "-" + (from.getMonth() + 1) + "-" + from.getDate());
//alert("to:" + to.getFullYear() + "-" + (to.getMonth() + 1) + "-" + to.getDate());
var interval = to.getTime() - from.getTime();
dt2.setTime((dt2.getTime() - interval))/(24*60*60*1000);
alert("dt2:" + dt2.getFullYear() + "-" + (dt2.getMonth() + 1) + "-" + dt2.getDate());
if (dt2.getTime() > dt1.getTime()) {
alert("over");
} else {
alert("ok");
}
</script>