时间验证(Javascript)

时间验证(Javascript),javascript,validation,time,Javascript,Validation,Time,我有一个表单(使用JavaScript),其中用户应该输入工作开始时间、休息开始时间、休息结束时间和工作结束时间等信息。我有4个文本框用于此目的。输入文本框的时间为hhmm格式(仅限24小时) 要求: 1. The break times (start and end) must be within the work start and end time. 2. Break start must be before break end time. 3. Users can take up wor

我有一个表单(使用JavaScript),其中用户应该输入工作开始时间、休息开始时间、休息结束时间和工作结束时间等信息。我有4个文本框用于此目的。输入文本框的时间为
hhmm
格式(仅限24小时)

要求:

1. The break times (start and end) must be within the work start and end time.
2. Break start must be before break end time.
3. Users can take up work shifts during the day or even overnight.
4. Work time(excluding breaks) should be less than 8 hours and greater than 4 hours.
因此,一些典型的有效条目是:

User1-
Start time: 0900
Break start time:1300
Break end time:1400
End time:1600

User2-
Start time:2200
Break start time:2300
Break end time:2330
End time:0400
Case1 - Break start before break end
 Start time:2200
 Break start time: 2330
 Break end time: 2300
 End time:0400   

Case 2 -Breaks outside work time

 Start time:2200
 Break start time:1830
 Break end time: 1900
 End time:0400
一些无效条目可能是:

User1-
Start time: 0900
Break start time:1300
Break end time:1400
End time:1600

User2-
Start time:2200
Break start time:2300
Break end time:2330
End time:0400
Case1 - Break start before break end
 Start time:2200
 Break start time: 2330
 Break end time: 2300
 End time:0400   

Case 2 -Breaks outside work time

 Start time:2200
 Break start time:1830
 Break end time: 1900
 End time:0400
我在为需求1、2和3编写验证代码(JavaScript)时遇到问题。请帮帮我

这是我到目前为止得到的。(请注意:我不能使用日期对象。)

var wrkSt=getElement('TB1')。值;
var wrkSt_hr=parseFloat(wrkSt.substr(0,2));
var wrkSt_mn=parseFloat(wrkEd.substr(2,2));
var brkSt=getElement('TB2')。值;
var brkSt_hr=parseFloat(brkSt.substr(0,2));
var brkSt_mn=parseFloat(brkEd.substr(2,2));
var brkEd=getElement('TB3')。值;
var brkEd_hr=parseFloat(brkSt.substr(0,2));
var brkEd_mn=parseFloat(brkEd.substr(2,2));
var wrkEd=getElement('TB4')。值;
var wrkEd_hr=parseFloat(wrkEd.substr(0,2));
var wrkEd_mn=parseFloat(wrkEd.substr(2,2));
var msg='';
如果((wrkSt_hr>wrkEd_hr)| |((wrkSt_hr==wrkEd_hr)和&(wrkSt_mn>=wrkEd_mn)))
{
msg+=‘选择夜班’;
}   
如果(wrkEd_hr>12){wrkEd_hr-=12;}
如果(wrkSt_hr>12){wrkSt_hr-=12;}
如果(brkSt_hr>12){brkSt_hr-=12;}
如果(brkEd_hr>12){brkEd_hr-=12;}
var-Breakdiff=((brkEd_hr-brkSt_hr)*60)+(brkEd_mn-brkSt_mn);
var Workdiff_tot=((wrkEd_hr-wrkSt_hr)*60)+(wrkEd_mn-wrkSt_mn);
var Shiftdiff=工作时间-中断时间差;
如果(Shiftdiff>480)//8小时=8*60=480分钟
{
味精+=‘时间大于8小时’;
}
如果(Shiftdiff<240)//4小时=4*60=240分钟
{
味精+=‘时间少于4小时’;
}
请帮助我检查休息时间和工作时间的逻辑。Thx为任何帮助提前

函数验证(开始、中断开始、中断结束、结束){
function validate(start, breakStart, breakEnd, end) {
  var minutes = [];
  for (var i = 0; i < 4; ++i) {
    var time = arguments[i];
    if (!/^(?:[01]\d|2[0-3])[0-5]\d$/.test(time)) {
      throw new Error("Invalid time " + time);
    }
    var minute = minutes[i] = time.substring(0, 2) * 60 + +time.substring(2);
    if (i && minute < minutes[i - 1]) {  // Take into account times that cross midnight.
      minutes[i] = (minute += 24*60);
    }
    if (i && minute <= minutes[i - 1]) {
      throw new Error("Out of order " + arguments[i - 1] + " and " + time);
    }
  }
  if (minutes[3] - minutes[0] > 8*60) { throw new Error("Shift too long"); }
  if (minutes[3] - minutes[0] > 4*60) { throw new Error("Shift too short"); }
}
var分钟=[]; 对于(变量i=0;i<4;++i){ 变量时间=参数[i]; 如果(!/^(?[01]\d | 2[0-3])[0-5]\d$/.test(time)){ 抛出新错误(“无效时间”+时间); } var minute=minutes[i]=time.substring(0,2)*60++time.substring(2); 如果(i&&minute4*60){抛出新错误(“移位太短”);} }
如果这些时间跨越一天以上,您还需要有日期和时间。@Dutchie:这似乎有些奇怪,但我的代码中不使用日期。因此,如果用户输入2200到0400(10:00p到04:00a),只使用时间。因此它独立于日期。Thx无论如何:)然后,如果小时是00-04,则需要添加24,使其晚于2300