js如何控制 开始日期 到 结束日期 跨月的判断?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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判断两个值,但可以实现的就太少了,基本都是先判断 开始日期是否小于结束日期,不小于那么会弹出个提示框,并且这个功能不能跨月执行,开始日期和结束日期的月份必需相等。如不等 弹出提示框。基本补充就到这个了,如果不明白的,还可以追问
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获取某周某月下月某季度的开始日期结束日期及判断日期第几周
/** * 获取某周、某月、上月、某季度的开始日期、结束日期及判断日期第几周 */ //格式化日期:yyyy-MM-dd function formatDate(date) { var myyear = date.getFullYear(); var mymonth = date.getMonth()+1; var myweekday = date.getDate(); if(mymonth < 10){ mymonth = "0" + mymonth; } if(myweekday < 10){ myweekday = "0" + myweekday; } return (myyear+"-"+mymonth + "-" + myweekday); } //获得某月的天数 function getMonthDays(paraYear,paraMonth){ var monthStartDate = new Date(paraYear, paraMonth, 1); var monthEndDate = new Date(paraYear, paraMonth + 1, 1); var days = (monthEndDate - monthStartDate)/(1000 * 60 * 60 * 24); return days; } //获得某周的开始日期 function getWeekStartDate(paraYear,paraMonth,paraDay,paraDayOfWeek) { var weekStartDate = new Date(paraYear, paraMonth, paraDay + 1 - paraDayOfWeek); return formatDate(weekStartDate); } //获得某周的结束日期 function getWeekEndDate(paraYear,paraMonth,paraDay,paraDayOfWeek) { var weekEndDate = new Date(paraYear, paraMonth, paraDay + (7 - paraDayOfWeek)); return formatDate(weekEndDate); } //获得某月的开始日期 function getMonthStartDate(paraYear,paraMonth){ var monthStartDate = new Date(paraYear, paraMonth, 1); return formatDate(monthStartDate); } //获得某月的结束日期 function getMonthEndDate(paraYear,paraMonth){ var monthEndDate = new Date(paraYear,paraMonth, getMonthDays(paraYear,paraMonth)); return formatDate(monthEndDate); } //获得上月开始时间 function getLastMonthStartDate(paraYear, lastMonth){ var lastMonthStartDate = new Date(paraYear, lastMonth, 1); return formatDate(lastMonthStartDate); } //获得上月结束时间 function getLastMonthEndDate(paraYear, lastMonth, lastMonth){ var lastMonthEndDate = new Date(paraYear, lastMonth, getMonthDays(lastMonth)); return formatDate(lastMonthEndDate); } //获得某季度的开始日期 function getQuarterStartDate(paraYear,paraSeason){ switch (paraSeason){ case ‘1‘ : return paraYear+"-01-01"; case ‘2‘ : return paraYear+"-04-01"; case ‘3‘ : return paraYear+"-07-01"; case ‘4‘ : return paraYear+"-10-01"; } } //获得某季度的结束日期 function getQuarterEndDate(paraYear,paraSeason){ switch (paraSeason){ case ‘1‘ : return paraYear+"-03-31"; case ‘2‘ : return paraYear+"-06-30"; case ‘3‘ : return paraYear+"-09-30"; case ‘4‘ : return paraYear+"-12-31"; } } //获取某年某周的开始日期 function getBeginDateOfWeek(paraYear, weekIndex){ var firstDay = GetFirstWeekBegDay(paraYear); //7*24*3600000 是一星期的时间毫秒数,(JS中的日期精确到毫秒) var time=(weekIndex-1)*7*24*3600000; var beginDay = firstDay; //为日期对象 date 重新设置成时间 time beginDay.setTime(firstDay.valueOf()+time); return formatDate(beginDay); } //获取某年某周的结束日期 function getEndDateOfWeek(paraYear, weekIndex){ var firstDay = GetFirstWeekBegDay(paraYear); //7*24*3600000 是一星期的时间毫秒数,(JS中的日期精确到毫秒) var time=(weekIndex-1)*7*24*3600000; var weekTime = 6*24*3600000; var endDay = firstDay; //为日期对象 date 重新设置成时间 time endDay.setTime(firstDay.valueOf()+weekTime+time); return formatDate(endDay); } //获取日期为某年的第几周 function GetWeekIndex(dateobj) { var firstDay = GetFirstWeekBegDay(dateobj.getFullYear()); if (dateobj < firstDay) { firstDay = GetFirstWeekBegDay(dateobj.getFullYear() - 1); } d = Math.floor((dateobj.valueOf() - firstDay.valueOf()) / 86400000); return Math.floor(d / 7) + 1; } //获取某年的第一天 function GetFirstWeekBegDay(year) { var tempdate = new Date(year, 0, 1); var temp = tempdate.getDay(); if (temp == 1){ return tempdate; } temp = temp == 0 7 : temp; tempdate = tempdate.setDate(tempdate.getDate() + (8 - temp)); return new Date(tempdate); }
以上是关于js如何控制 开始日期 到 结束日期 跨月的判断?的主要内容,如果未能解决你的问题,请参考以下文章
vue:element.ui中中日期时间范围选择控件怎么设置选择的范围,不能跨月选择
js获取某周某月下月某季度的开始日期结束日期及判断日期第几周
MS Access:按开始日期和结束日期之间每个月的月份分组