jQuery - пресмятане на часовете от 22:00 до 06:00

Дискусията в 'Web Development' стартирана от woodmonster, Окт 22, 2018.

Тагове:
  1. woodmonster

    woodmonster Member

    Рег.:
    Апр 3, 2012
    Съобщения:
    103
    Харесвания:
    4
    Точки:
    18
    Здравейте! Имам следния казус:
    Имам две select option менюта, който ми държат часовете от 00:15 до 24:00.

    Единия select option е за Работа започва (т.е. избира се час, през който дадена личност е започнал работа).

    Другия select option е за Работа свършва (т.е. избира се час, когато същата личност е свършил работа)

    Имам и трето текстово поле в което се генерира колко часа е работил въпросната личност, ако е бачкал между часовете 22:00 до 06:00

    Кода работи при следните случай:
    Като избера за работа започва 23:00 и работа свършва 06:00 - в текстовото поле ми се генерира, че е работил 07:00 часа нощен труд, което е добре.

    Като избера за работа започва 08:00 и работа свършва 17:00 - в текстовото поле ми се генерира, че е работил 00:00 часа нощен труд, което е добре.

    Като избера за работа започва 20:00 и работа свършва 24:00 - в текстовото поле ми се генерира, че е работил 02:00 часа нощен труд, което е добре (понеже за нощен труд се смятат работените часове му 22:00 и 06:00).

    Като избера за работа започва 00:15 и работа свършва 09:00 - в текстовото поле ми се генерира, че е работил 05:45 часа нощен труд, което е добре.

    Проблема е когато избера за работа започва 00:15 и работа свършва 23:00 в текстовото поле ми се генерира, че е работил 08:00 часа нощен труд, а трябва да бъде 06:45 нощен труд, понеже от 00:15 до 06:00 са 05:45 минути работа и от 22:00 до 23:00 са 1 час бачкане, то общо трябва да е 06:45 нощен труд.

    Нещо обаче не мога да кача кода тук(при опит да кача кода ми дава грешка 403) и съм направил jsfiddle, където може и да се тества. Там проблемите съм ги описал като коментар долу под html кода.

    P.S. Кода е грозно написан, но за тестване става!
     
  2. AseasRoa

    AseasRoa Well-Known Member

    Рег.:
    Юни 22, 2014
    Съобщения:
    922
    Харесвания:
    300
    Точки:
    63
    Ето ти един вариант:

    Код:
    $(document).ready(function() {
        $("#rabotaZapochva").change(workingAtNight);
        $("#rabotaShvyrshva").change(workingAtNight);
    });
    
    function strToSeconds(str) {
        var arr = str.split(":");
      var seconds = (arr[0] * 3600) + (arr[1] * 60);
     
      return seconds;
    }
    
    function secondsToStr(seconds)
    {
        var h = Math.floor(seconds / 3600);
      var m = Math.floor((seconds - (h * 3600)) / 60);
     
      if (h < 10) h = "0" + h;
      if (m < 10) m = "0" + m;
     
      var str =  h + ":" + m;
     
      return str;
    }
    
    function workingAtNight () {
        var start_seconds = strToSeconds($('#rabotaZapochva').val());
        var end_seconds   = strToSeconds($('#rabotaShvyrshva').val());
        var t1 = 6 * 3600; // в колко секунди след 00:00 завършва нощната смяна
        var t2 = 22 * 3600; // в колко секунди след 00:00 започва нощната смяна
        var day_seconds = 24 * 3600; // броя на секунди в 1 ден (86400)
        var work_seconds  = 0; // ще бъде броя на секунди, през които е работено в нощна смяна
           
        if (start_seconds < end_seconds)
        {
            if (start_seconds < t1) work_seconds += t1 - start_seconds;
            if (end_seconds < t1) work_seconds -= t1 - end_seconds;
           
            if (end_seconds > t2) work_seconds += end_seconds - t2;
            if (start_seconds > t2) work_seconds -= start_seconds - t2;
        }
        else if (start_seconds > end_seconds)
        {
            if (end_seconds <= t1) work_seconds += end_seconds;
            if (start_seconds <= t1) work_seconds -= start_seconds;
             
            if (start_seconds >= t2) work_seconds += day_seconds - start_seconds;
        if (start_seconds < t2) work_seconds += day_seconds - t2;
            if (end_seconds > t1) work_seconds += t1;
            if (end_seconds >= t2) work_seconds += end_seconds - t2;
        }
    
        var test = secondsToStr(work_seconds);
    
        if (test > "08:00"){
            test = "08:00";
        }
    
        $('#noshtenTrud').val(test);
     };
    
    Проверявах го, но може все още някъде да има грешка. Сигурно може и да се опрости, ама не ми се мисли повече
     

Сподели страницата

  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies.
    Dismiss Notice