Russian Qt Forum
Ноябрь 23, 2024, 02:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как узнать количество рабочих дней в промежутке между двумя датами?  (Прочитано 3406 раз)
Yurko_San
Гость
« : Апрель 13, 2017, 12:25 »

Добрый день! Не подскажите, как узнать количество рабочих дней в промежутке между двумя датами, может API яндекса какой?
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Апрель 13, 2017, 14:36 »

на каком предприятии ? )
Записан
Yurko_San
Гость
« Ответ #2 : Апрель 14, 2017, 07:08 »

Имеется в виду по России.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #3 : Апрель 14, 2017, 08:24 »

Необходимо ввести понятие рабочий календарь, причем от страны к стране и даже от предприятия к предприятию он будет совершенно разным, так как нет предопределенного правила по формированию такого календаря.
Берем даты - считаем рабочие дни в соответствии с выбранным календарем.

Если имеется в виду, что хотелось бы считать все будничные дни рабочими, то считаем количество дней между датами

Код
C++ (Qt)
QDate first_date = ...;
QDate last_date = ...;
int day_count = first_date.daysTo( last_date );
int first_day_of_week = first_date.dayOfWeek();
int last_day_of_week = last_date.dayOfWeek();
int first_work_day_of_week = first_day_of_week > Qt::Friday ? first_day_of_week : Qt::Friday;
int last_work_day_of_week = last_day_of_week < Qt::Saturday ? last_day_of_week : Qt::Friday;
int work_day_of weak = last_work_day_of_week > first_work_day_of_week
   ? last_work_day_of_week - first_work_day_of_week
   : last_work_day_of_week - first_work_day_of_week +7;
 
int full_weak_count = day_count / 7;
int work_day_count =  full_weak_count * 5 + work_day_of weak;
 

Код на корректность не проверял, но что-то типа этого.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.158 секунд. Запросов: 22.