js 怎么计算 开始日期(2011-02-22)+天数(3)=结束日期(2011-02-24)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 怎么计算 开始日期(2011-02-22)+天数(3)=结束日期(2011-02-24)相关的知识,希望对你有一定的参考价值。

参考技术A <script type="text/javascript">
window.onload = function ()
var mydate = new Date(2011,1,22);//年、月、日,月份为1,因为从0开始,1即2月份
alert(addDay(mydate, 3));//加 3 天
//如果当天不算的话,那上面的就改成 3 - 1,就是2011-02-24

function addDay(dt, day)
var allseconds = dt.getTime();//参数时间的毫秒数
var ds = 24*60*60*1000;//一天的毫秒数
var nds = ds * day;//N天的毫秒数
var t = new Date(Math.abs(allseconds) + nds);

//return t; //返回时间对象

var yyyy = t.getFullYear();
var M = t.getMonth() + 1; //值范围0-11
var dd = t.getDate(); //值范围1-31

return yyyy + "-" + M + "-" + dd;


</script>
参考技术B 取出年月日分别判断,天数加上3天和结束的日期天数判断就行了

js如何控制 开始日期 到 结束日期 跨月的判断?


<input name="control_date" type="text" id="control_date" size="10" maxlength="10" onClick="new Calendar().show(this);" readonly="readonly" />

<input name="control_date2" type="text" id="control_date2" size="10" maxlength="10" onClick="new Calendar().show(this);"
readonly="readonly" />
<input type="button" name="but" value="查询" onclick="submit" />

我把代码贴在上面,这个日历是从网上下载的,页面里引入他那个js然后写两个input(一个开始日期,一个结束日期) ,onclick直接应用那个js里的方法就可以实现点击选择时间,每次点击的时候会自动会选择当前时间,我想在点击提交的时候做下判断,限制用户选择的时候 第一:跨月 第二: 开始时间不能大于结束时间 第三:结束时间不能比开始时间早 请问这个该怎么实现,会的朋友给写个js 或者指点,谢谢
我想的思路是 首先先获取到用户选择的日期值是多少,然后利用时间戳,if判断两个值,但可以实现的就太少了,基本都是先判断 开始日期是否小于结束日期,不小于那么会弹出个提示框,并且这个功能不能跨月执行,开始日期和结束日期的月份必需相等。如不等 弹出提示框。基本补充就到这个了,如果不明白的,还可以追问

function checkStartAndEndDay(startTime,endTime)

if (startTime == null || endTime == null || startTime== ""
|| endTime == "")
alert("请选择起止时间");
return false;


var regS = new RegExp("-", "gi");
var date1 = startTime.replace(regS, "/");
var date2 = endTime.replace(regS, "/");
var st = new Date(Date.parse(date1));
var et = new Date(Date.parse(date2));

if (et < st)
alert("结束时间要大于开始时间!");
return false;


var diff = et.getTime() - st.getTime();
var days = Math.floor(diff / (1000 * 60 * 60 * 24));
if (days >= 7)
alert("时间跨度不能超过7天");
return false;


return true;


这上面的代码可以解决你要的开始时间不能小于结束时间的问题,判断跨月的js如下:
function check_sub()

var begin_ = document.getElementById('startTime').value;
var end_ = document.getElementById('endTime').value;
var st=startTime.split("-"); //将时间分成数组然后比较年、月份的大小
var et=endTime.split("-");
if(st[0]!=et[0])
alert("抱歉,暂时不提供跨年查询");
return false;
else
if(st[1]!=et[1])
alert("抱歉,暂时不提供跨月查询");
return false;



这上面的可以解决跨月的判断,你看下,应该就没问题了
参考技术A var begin_ = document.getElementById('control_date');
var end_ = document.getElementById('control_date2');
var begin_arr=begin_.split("-");
var end_arr=end_.split("-");
var begin_times = new Date(arr[0],arr[1],arr[2]);
var end_times = new Date(arr[0],arr[1],arr[2]);
var begin_time = begin_times.getTime();
var end_time = end_times.getTime();
if(begin_time > end_time)

alert("开始时间大于结束时间");

我没看明白你的 当月是什么意思 如果开始时间是 11年12月31日 那结束时间不是只能写当天了追问

回答你最后的一句话, 如果 开始时间 选择的是11年12月31日,那么结束时间 只能选择12月31日,其他的就不能选择了,如果选择了这不就跨月了?你上面写的那个好像只是处理了一部分,那个跨越的该怎么处理呢?是不是要单门的取出选择开始时间和结束时间的两个月份值,比较两个如果相等,那么就是一个月份,如果不相等那么就是跨月,还有一个就是如果我开始时间选择的是11年11月11日,结束时间我选择的是11年1月1日,

追答

不用这么麻烦 直接在失去焦点id="control_date2" 这个时候 调用我写的代码 然后清空"control_date2" 的值让他重新选择

追问

我直接在id="control_date2"的这段里 增加了一个onmouseout = mouseout();方法,然后js里就把你写的那个代码调用过去,但测试后没有反映,不知道我哪还缺漏了。 报错是那段有对象不能正常使用 我的Q 1297597979 如有空可以加一下,帮我看下

begin_.split is not a function
[在此错误处中断] var begin_arr=begin_.split("-");

追答

如果为空 就不要分割你自己加个判断

追问

var begin_ = document.getElementById('control_date');
var end_ = document.getElementById('control_date2');
var begin_arr=begin_.split("-");
var end_arr=end_.split("-");
这几步我都打印了下,前两个取值可能你写的漏了点,应该在()后面加.value
然后打印正常显示选择的日期 格式:2011-12-31
然后继续测试下面的 打印begin_arr 因为这个已经把取得值中间的 “ - ”去掉,
打印结果是2011,12,31 后面就不管用了

追答

var begin_ = document.getElementById('control_date').value;
var end_ = document.getElementById('control_date2').value;
var begin_arr=begin_.split("-");
var end_arr=end_.split("-");
var begin_times = new Date(begin_arr[0],begin_arr[1],begin_arr[2]);
var end_times = new Date(end_arr[0],end_arr[1],end_arr[2]);
var begin_time = begin_times.getTime();
var end_time = end_times.getTime();
if(begin_time > end_time)

alert("开始时间大于结束时间");
不好意思 着急下班 很多语法错误

追问

您太客气了,我测试之后是没有问题了,但感觉有点不好,因为按你说的把onmouseout放到第二个选择日期的框里,然后调用这段js,那么在测试的时候,点击选择 开始时间,然后故意把结束时间提前几天,鼠标进入下一个select框,js也不报错,然而再次点击结束时间才会弹出来,而且现在也没有清空的这么一说,不知道该怎么办

追答

你不要用 onmouseout 事件用onblur

追问

说了那么多才发现,onblur根本就不支持标签

以上是关于js 怎么计算 开始日期(2011-02-22)+天数(3)=结束日期(2011-02-24)的主要内容,如果未能解决你的问题,请参考以下文章

js 怎么计算上一周下一周?

开始日期加上月份得到终止日期 用js怎样计算?还要判断是不是为闰年?

js如何控制 开始日期 到 结束日期 跨月的判断?

js计算两个日期间的所有日期

js怎么计算2个日期之间差多少天

js 怎么计算出 两个日期之间相差多少月 比如: