BG Development


  Reply to this topicStart new topicStart Poll

> jQuery - пресмятане на часовете от 22:00 до 06:00
woodmonster
Публикувано на: 23-10-2018, 06:01
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 11
Регистриран на: 16.03.17



Здравейте! Имам следния казус:
Имам две 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 нощен труд.

Ето и jsfiddle

Кода е малко грозно написан, но за тестване става:
Код:
CODE
<label for="rabotaZapochva" style="display:inline;">РАБОТА ЗАПОЧВА:</label>
<select name="rabotaZapochva" id="rabotaZapochva" style="display: inline;width: 90px;font-size: 19px;font-weight: bold;">                      
 <option>Час:</option>
 <option>00:15</option>
 <option>00:30</option>
 <option>00:45</option>
 <option>01:00</option>
 <option>01:15</option>
 <option>01:30</option>
 <option>01:45</option>
 <option>02:00</option>
 <option>02:15</option>
 <option>02:30</option>
 <option>02:45</option>
 <option>03:00</option>
 <option>03:15</option>
 <option>03:30</option>
 <option>03:45</option>
 <option>04:00</option>
 <option>04:15</option>
 <option>04:30</option>
 <option>04:45</option>
 <option>05:00</option>
 <option>05:15</option>
 <option>05:30</option>
 <option>05:45</option>
 <option>06:00</option>
 <option>06:15</option>
 <option>06:30</option>
 <option>06:45</option>
 <option>07:00</option>
 <option>07:15</option>
 <option>07:30</option>
 <option>07:45</option>
 <option>08:00</option>
 <option>08:15</option>
 <option>08:30</option>
 <option>08:45</option>
 <option>09:00</option>
 <option>09:15</option>
 <option>09:30</option>
 <option>09:45</option>
 <option>10:00</option>
 <option>10:15</option>
 <option>10:30</option>
 <option>10:45</option>
 <option>11:00</option>
 <option>11:15</option>
 <option>11:30</option>
 <option>11:45</option>
 <option>12:00</option>
 <option>12:15</option>
 <option>12:30</option>
 <option>12:45</option>
 <option>13:00</option>
 <option>13:15</option>
 <option>13:30</option>
 <option>13:45</option>
 <option>14:00</option>
 <option>14:15</option>
 <option>14:30</option>
 <option>14:45</option>
 <option>15:00</option>
 <option>15:15</option>
 <option>15:30</option>
 <option>15:45</option>
 <option>16:00</option>
 <option>16:15</option>
 <option>16:30</option>
 <option>16:45</option>
 <option>17:00</option>
 <option>17:15</option>
 <option>17:30</option>
 <option>17:45</option>
 <option>18:00</option>
 <option>18:15</option>
 <option>18:30</option>
 <option>18:45</option>
 <option>19:00</option>
 <option>19:15</option>
 <option>19:30</option>
 <option>19:45</option>
 <option>20:00</option>
 <option>20:15</option>
 <option>20:30</option>
 <option>20:45</option>
 <option>21:00</option>
 <option>21:15</option>
 <option>21:30</option>
 <option>21:45</option>
 <option>22:00</option>
 <option>22:15</option>
 <option>22:30</option>
 <option>22:45</option>
 <option>23:00</option>
 <option>23:15</option>
 <option>23:30</option>
 <option>23:45</option>
 <option>24:00</option>
 </select>
 
 <label for="rabotaShvyrshva" style="display:inline;">РАБОТА СВЪРШВА:</label>
 <select name="rabotaShvyrshva" id="rabotaShvyrshva" style="display: inline;width: 90px;font-size: 19px;font-weight: bold;">                      
 <option>Час:</option>
 <option>00:15</option>
 <option>00:30</option>
 <option>00:45</option>
 <option>01:00</option>
 <option>01:15</option>
 <option>01:30</option>
 <option>01:45</option>
 <option>02:00</option>
 <option>02:15</option>
 <option>02:30</option>
 <option>02:45</option>
 <option>03:00</option>
 <option>03:15</option>
 <option>03:30</option>
 <option>03:45</option>
 <option>04:00</option>
 <option>04:15</option>
 <option>04:30</option>
 <option>04:45</option>
 <option>05:00</option>
 <option>05:15</option>
 <option>05:30</option>
 <option>05:45</option>
 <option>06:00</option>
 <option>06:15</option>
 <option>06:30</option>
 <option>06:45</option>
 <option>07:00</option>
 <option>07:15</option>
 <option>07:30</option>
 <option>07:45</option>
 <option>08:00</option>
 <option>08:15</option>
 <option>08:30</option>
 <option>08:45</option>
 <option>09:00</option>
 <option>09:15</option>
 <option>09:30</option>
 <option>09:45</option>
 <option>10:00</option>
 <option>10:15</option>
 <option>10:30</option>
 <option>10:45</option>
 <option>11:00</option>
 <option>11:15</option>
 <option>11:30</option>
 <option>11:45</option>
 <option>12:00</option>
 <option>12:15</option>
 <option>12:30</option>
 <option>12:45</option>
 <option>13:00</option>
 <option>13:15</option>
 <option>13:30</option>
 <option>13:45</option>
 <option>14:00</option>
 <option>14:15</option>
 <option>14:30</option>
 <option>14:45</option>
 <option>15:00</option>
 <option>15:15</option>
 <option>15:30</option>
 <option>15:45</option>
 <option>16:00</option>
 <option>16:15</option>
 <option>16:30</option>
 <option>16:45</option>
 <option>17:00</option>
 <option>17:15</option>
 <option>17:30</option>
 <option>17:45</option>
 <option>18:00</option>
 <option>18:15</option>
 <option>18:30</option>
 <option>18:45</option>
 <option>19:00</option>
 <option>19:15</option>
 <option>19:30</option>
 <option>19:45</option>
 <option>20:00</option>
 <option>20:15</option>
 <option>20:30</option>
 <option>20:45</option>
 <option>21:00</option>
 <option>21:15</option>
 <option>21:30</option>
 <option>21:45</option>
 <option>22:00</option>
 <option>22:15</option>
 <option>22:30</option>
 <option>22:45</option>
 <option>23:00</option>
 <option>23:15</option>
 <option>23:30</option>
 <option>23:45</option>
 <option>24:00</option>
 </select>
 
 <br><br>
 <label for="noshtenTrud" style="display:inline;white-space:pre;">НОЩЕН ТРУД:</label>
 <input type="text" name="noshtenTrud" autocomplete="off" style="width: 90px;" id="noshtenTrud" >
 


Ето и javascript кода:
CODE
$(document).ready(function() {
 $("#rabotaZapochva").change(workingAtNight);
 $("#rabotaShvyrshva").change(workingAtNight);
});

function workingAtNight () {
       var start_time = $('#rabotaZapochva').val();
       var end_time = $('#rabotaShvyrshva').val();
       if(end_time > "06:00" && end_time < "22:00"){
           end_time = "06:00";
       }


       if((end_time > "22:00") || (end_time < "06:00")){
           if(start_time > "22:00" || (start_time > "00:00" && start_time < "06:00")){
               start_time = $('#rabotaZapochva').val();
           }
           else{
               start_time = "22:00";
           }
       }
       else{
           start_time = $('#rabotaZapochva').val();
       }


       var diff = ( new Date("1970-1-1 " + end_time) - new Date("1970-1-1 " + start_time) ) / 60000 / 60;

       var sumaNoshtenTrud = 0;

       var decimalTimeString = diff;
       var n = new Date(0,0);
       n.setSeconds(+decimalTimeString * 60 * 60);
       var test = n.toTimeString().slice(0, 5);
       if(test > "08:00"){
           test = "08:00";
       }


       if(start_time >= "06:00" && start_time < "22:00"){
           test = "00:00";
       }



       $('#noshtenTrud').val(test);
       
       

   };
PMEmail Poster
Top
JanBirdX
Публикувано на: 23-10-2018, 09:44
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1553
Регистриран на: 21.02.05



То хубаво джабаскрипт, но би било добре да не се работи със стрингове. Имам някакво вътрешно предчуствие че ако времете се използва чрез минути от начало на деня всичко ще се получи.
PMEmail Poster
Top
Антон Яначков
Публикувано на: 23-10-2018, 10:55
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Старо куче

Мнения: 735
Регистриран на: 27.07.16



За да се получат нещата след реда където изчисляваш разликата:
CODE

      var diff = ( new Date("1970-1-1 " + end_time) - new Date("1970-1-1 " + start_time) ) / 60000 / 60;


добави този IF:
CODE

if(diff > 8){diff=diff-16;}


Така вече нещата действително ще работят. В противен случай ти получаваш разлика по-голяма от 8 часа, а по-долу изкуствено я законтряш на 8, а не бива.

Успех!
PMEmail PosterUsers Website
Top
woodmonster
Публикувано на: 23-10-2018, 11:18
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 11
Регистриран на: 16.03.17



Антон Яначков Благодаря Ви много! Кода сработи!
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0