Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 15.10.2010, 10:41   #1
RKS
Пользователь Подтвердите свой е-майл
 
Аватар для RKS
 
Регистрация: 15.08.2007
Сообщений: 21
По умолчанию количество рабочих дней в месяце.

Уважаемые, туплю сижу, каким образом подсчитать количество рабочих дней в месяце? заколебался извращаться уже Заранее благодарю
RKS вне форума Ответить с цитированием
Старый 15.10.2010, 11:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Вам по простому или по правильному?
совсем по простому - цикл по дням от первой даты до последней - проверяя день недели.

чуть посложнее - берём первое число месяца - какой был день недели и подставив в составленную формулу этот день недели и количество дней в месяце вычисляем количество рабочих дней.

А по правильному - это должно быть завязано на таблицу с рабочими днями
(включая праздничные дни и дни переносов праздники<->рабочие дни). Делаете оттуда выборку - получаете количество (а при необходимости и даты) рабочих дней.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.10.2010, 12:15   #3
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

помнится тоже была у меня таая задача сделал так:
Код:
//подсчитать количество дней в месяце-------------

function DaysOfMonth( mm, yy: integer ): integer;
begin
   if mm = 2 then
   begin
      Result := 28;
      if IsLeapYear( yy ) then Result := 29;
   end
   else
   begin
      if mm < 8 then
      begin
         if ( mm mod 2 ) = 0 then
            Result := 30
         else
            Result := 31;
      end
      else
      begin
         if ( mm mod 2 ) = 0 then
            Result := 31
         else
            Result := 30;
      end;
   end;
end;
функция вернет количество дней в месяце mm и yy соответственно месяц и год.
Код:
koldn:=DaysOfMonth(2,2010);
wm_leviathan вне форума Ответить с цитированием
Старый 15.10.2010, 12:32   #4
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

или ИМЕННО рабочих? включая выходные праздники больничные и т.п ? (учитывая что график мб разный у каждого человека например сутки через двое)
wm_leviathan вне форума Ответить с цитированием
Старый 19.10.2010, 16:27   #5
RKS
Пользователь Подтвердите свой е-майл
 
Аватар для RKS
 
Регистрация: 15.08.2007
Сообщений: 21
По умолчанию

спасибочки, щас попробую
to wm_leviathan, график обычный, с понедельника по пятницу, без учета праздников
RKS вне форума Ответить с цитированием
Старый 19.10.2010, 17:10   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,517
По умолчанию

Нашел в одной своей древней программе...
Я извращался таким образом:

uses DateUtils;

Узнаём количество дней в месяце по году и месяцу.
Код:
function LastDay(YYYY, MM: Word): Integer;
var DD: Word;
  D: TDateTime;
begin
  DecodeDate(EncodeDate(YYYY,MM,1), YYYY, MM, DD);
  D := EndOfAMonth(YYYY, MM);
  DecodeDate(D, YYYY, MM, DD);
  Result := DD;
end;
Отбрасываем субботы и воскресенья (для русской Винды)
Код:
function GetRabDays(YYYY, MM: Word): Integer;
var dayweek: string; i: Integer;
begin
  Result := 0;
  for i := 1 to LastDay(YYYY, MM) do
  begin
    dayweek := FormatDateTime('dddd', EncodeDate(YYYY, MM, i));
    if (dayweek <> 'суббота') and (dayweek <> 'воскресенье') then
      Inc(Result);
  end;
end;
Пробуем...
Код:
ShowMessage(IntToStr(GetRabDays(2010,10)));
В этом месяце 21 рабочий день? Хз, проверь, может косяки где есть, давно писал...

Последний раз редактировалось _SERGEYX_; 20.10.2010 в 09:58.
_SERGEYX_ вне форума Ответить с цитированием
Старый 30.10.2010, 08:00   #7
RKS
Пользователь Подтвердите свой е-майл
 
Аватар для RKS
 
Регистрация: 15.08.2007
Сообщений: 21
По умолчанию

Спасибо большое _SERGEYX_ , все работает. а то я как уже только не извращался))
RKS вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение количества указанных дней в любом месяце valerij Microsoft Office Excel 3 25.06.2010 15:46
подсчет рабочих дней ruavia3 Microsoft Office Excel 14 01.03.2010 12:22
Количество дней в месяце по диапазону дат VadimSh Microsoft Office Excel 6 27.11.2008 00:48
...дней в месяце Altera Общие вопросы Delphi 1 18.11.2008 07:44
определение кол-ва дней в месяце apelsin Общие вопросы Delphi 3 15.02.2007 08:21