【问题标题】:Time validations (Javascript)时间验证(Javascript)
【发布时间】:2011-05-04 17:37:21
【问题描述】:

我有一个表单(使用 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

我在为要求 1,2 和 3 编写验证代码 (JavaScript) 时遇到问题。请帮帮我。

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

        var wrkSt = getElement('TB1').value;
        var wrkSt_hr = parseFloat(wrkSt.substr(0,2));
        var wrkSt_mn= parseFloat(wrkEd.substr(2,2));

        var brkSt = getElement('TB2').value;
        var brkSt_hr = parseFloat(brkSt.substr(0,2));
        var brkSt_mn= parseFloat(brkEd.substr(2,2));

        var brkEd = getElement('TB3').value;
        var brkEd_hr = parseFloat(brkSt.substr(0,2));
        var brkEd_mn= parseFloat(brkEd.substr(2,2));

        var wrkEd = getElement('TB4').value;
        var wrkEd_hr = parseFloat(wrkEd.substr(0,2));
        var wrkEd_mn= parseFloat(wrkEd.substr(2,2));

        var msg='';
    if ((wrkSt_hr > wrkEd_hr) || ((wrkSt_hr == wrkEd_hr) && (wrkSt_mn >= wrkEd_mn)) )
    {

        msg+='shift overnight selected';                
    }   

if (wrkEd_hr>12){wrkEd_hr-=12;}
if (wrkSt_hr >12){wrkSt_hr -=12;}
if (brkSt_hr>12){brkSt_hr-=12;}
if (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 = Workdiff_tot - Breakdiff; 

if (Shiftdiff > 480) //8hours = 8*60 = 480 min
 {
  msg+='Time greater than 8 hrs';  
 }
 if (Shiftdiff < 240) //4 hours = 4*60 = 240 min
 {
 msg+='Time less than 4 hrs'; 
 }

请帮助我了解检查休息时间和工作时间的逻辑。感谢您提前提供任何帮助!

【问题讨论】:

  • 如果这些时间跨度超过一天,您还需要知道日期和时间。
  • @Dutchie :这可能看起来很奇怪,但我的代码中不会使用日期。因此,如果用户输入 2200 到 0400(10:00p 到 04:00a),则只使用时间。因此它与日期无关。无论如何谢谢:)
  • 那么如果小时是00-04,则需要加24使其晚于2300

标签: javascript validation time


【解决方案1】:
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"); }
}

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 2013-05-13
    • 2015-07-18
    • 2012-09-07
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多