Проверка времени (Javascript) - PullRequest
0 голосов
/ 04 мая 2011

У меня есть форма (с использованием 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

У меня проблемы с написанием кода проверки (JavaScript) для требований 1,2 и 3. Пожалуйста, помогите мне.

Вот что у меня так далеко. (Обратите внимание: я не могу использовать объекты 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'; 
 }

Пожалуйста, помогите мне с логикой для проверки перерывов и рабочего времени. Спасибо за любую помощь заранее!

1 Ответ

0 голосов
/ 04 мая 2011
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"); }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...