С Новым годом! Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
1 / 1 / 2
Регистрация: 16.02.2015
Сообщений: 137

Как рассчитать рабочее время между двумя датами и пренебречь выходными днями?

16.09.2019, 13:07. Показов 4179. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Можно ли рассчитать рабочее время между двумя датами и пренебречь выходными днями?
Под выходными я подразумеваю субботу и воскресенье. Праздники не интересуют.
Рабочий день с 9:00 до 18:00

Результат хотелось бы получить или в минутах или в часах.

Если взять примерные данные допустим date1 = 2017-01-26 12:00:00, date = 2017-01-30 12:00:00.
27,28 число это суббота и воскресение.
Значит на выходе должно получиться в часах например:
MySQL
1
2
| date 1             | date2               | buisness_time |
|2017-01-26 12:00:00 | 2017-01-30 12:00:00 | 9              |
Можно ли это воплотить? Пока я только через TIMESTAMPDIFF считаю...

Спасибо заранее
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.09.2019, 13:07
Ответы с готовыми решениями:

Как рассчитать количество дней между двумя датами
Помогите пожалуйста, как в vba рассчитать количество дней между двумя датами?

Рассчитать количество месяцев и дней между двумя датами
Нужна ваша помощь. Необходимо расчитать количество месяц и дней или только количество дней между двумя датами. У меня не получается это...

Рассчитать количество дней, прошедших между двумя датами
Помогите решить ТОЛЬКО с помощью циклов и условного оператора 3.Два дать заданные натуральными числами, обозначающими соответственно,...

3
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
17.09.2019, 10:31
Я делал похожую программку.Вычет выходных ,отпускных и больничных делал на пхп..думаю это можно решить и на скуле но то такое..А вот сумму рабочих часов решал с помощью триггера:
SQL
1
2
3
4
5
6
7
8
CREATE DEFINER=`ррр`@`ррр` TRIGGER `часы_работы_BEFORE_INSERT` BEFORE INSERT ON `часы_работы` FOR EACH ROW BEGIN
IF(NEW.нмрПроекта LIKE '%Отпуск' OR NEW.нмрПроекта LIKE'%Болен') THEN
SET NEW.рабВремя=NEW.рабВремя,NEW.пришол=NULL,NEW.ушол=NULL,NEW.перерыв=NULL;
ELSE
SET NEW.рабВремяt=timediff(timediff(NEW.ушол,NEW.пришол),NEW.перерыв);
END IF;
 
END
Добавлено через 8 минут
небольшой совет..разделите date на дату и время по разным колонкам ..
0
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
17.09.2019, 11:11
Хранимая процедура, на входе получает две даты, считает количество часов между ними в соответствии с вашими условиями
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
CREATE DEFINER=`Dunaev`@`%` PROCEDURE `cyberforum_procedure`(in start_date datetime, in finish_date datetime)
BEGIN
    declare iTmpCnt int;                                                                #временная переменная с количеством часов     
    declare dTmpDate datetime;                                                          #временная переменная с датой
    declare iResultCnt int;                                                             #сюда считаем результат - количество рабочих часов
    
    if (start_date < finish_date) then                                                  #Проверка что начальная дата меньше конечной, а то зациклимся еще
        begin
            set iTmpCnt:=0;                                                             #обнуляемся
            set iResultCnt:=0;                                                          #обнуляемся
            label1: LOOP                                                                #начало тела цикла
                set dTmpDate:=DATE_ADD(start_date,INTERVAL iTmpCnt HOUR);               #временной переменной с датой присваиваем значение входного параметра start_date + количество часов из переменной iTmpCnt
                if (dTmpDate < finish_date) then                                        #проверка, что мы еще не достигли конечной даты finish_date
                    begin
                        if (hour(dTmpDate)>=9)                                          #позже или равно 9 утра
                                and (hour(dTmpDate)<18)                                 #но раньше 18 вечера
                                and (WEEKDAY(dTmpDate) not in (5, 6)) then              #и не воскресенье и не суббота
                            begin
                                set iResultCnt:=iResultCnt+1;                           #тогда результат увеличивается на 1
                            end;
                        end if;
                                                                                        #ТО ЧТО НИЖЕ ВЫПОЛЯНЕТСЯ ДАЖЕ КОГДА НЕ СРАБОТАЛО УСЛОВИЕ ИЗ СТРОКИ 15
                        set iTmpCnt:=iTmpCnt+1;                                         #увеличиваем значение временной переменной с количеством часов на 1. 
                        ITERATE label1;                                                 #следующая иттерация цикла
                    end;                                                                    
                end if;
                                                                                        #ТО ЧТО НИЖЕ ВЫПОЛЯНЕТСЯ ТОЛЬКО КОГДА НЕ СРАБОТАЛО УСЛОВИЕ ИЗ СТРОКИ 13
                LEAVE label1;                                                           #выход из цикла
           END LOOP label1;                                                             #конец тела цикла
        end;
    end if;
    select iResultCnt;                                                                  #выводим что там насчитали
    
END
Добавлено через 2 минуты
Вызывать соответственно вот так
MySQL
1
call report.cyberforum_procedure('2019-09-13 10:00', '2019-09-22 14:00');
принимает значения и без времени, полагаю, в таком случае считает время 00:00

Добавлено через 48 секунд
можно переписать в функцию, что бы в дальнейшем использовать в запросах.
1
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
18.09.2019, 15:09
точно..weekday есть ведь..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2019, 15:09
Помогаю со студенческими работами здесь

Время между двумя датами
Здравствуйте! Стоит такая задача найти время между двумя датами, например: 22.08.12 и 24.10.12, как это можно реализовать? В классе...

Время между двумя датами
Помогите найти время между двумя датами с помощью DateTimePicker, например, между 29.05 2015 08:47 и 03.06.2015 17:49.Данные вводятся...

Вычислить время между двумя датами в цикле
Доброе время суток! Нужна помощь! Есть два списка, нужно получить итоговый список в котором разница во времени между исходными списками...

Рассчитать время между двумя событиями
Здравствуйте. Во время выполнения объявляю 2 переменных(старт и конец процесса, они в свою очередь тоже идут на лейблы). После хочу...

Количество дней между двумя датами. Как определить?
Подскажите есть дата отезда(тип данных дата\время) и дата приезда(тип данных дата\время) как найти количество дней(тип данных числовой)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru