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判断两个值,但可以实现的就太少了,基本都是先判断 开始日期是否小于结束日期,不小于那么会弹出个提示框,并且这个功能不能跨月执行,开始日期和结束日期的月份必需相等。如不等 弹出提示框。基本补充就到这个了,如果不明白的,还可以追问

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获取某周某月下月某季度的开始日期结束日期及判断日期第几周


  /**
* 获取某周、某月、上月、某季度的开始日期、结束日期及判断日期第几周
*/

  //格式化日期: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:按开始日期和结束日期之间每个月的月份分组

js获取某周某月下月某季度的开始日期结束日期及判断日期第几周

js怎么计算开始日期与结束日期之间的时间

日历控制如何传递日期、开始日期和结束日期