Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2012, 21:00   #1
Ann19
Новичок
Джуниор
 
Регистрация: 08.07.2012
Сообщений: 4
По умолчанию Расчет рабочих дней с DateTimePicker

У меня есть 2 DateTimePicker:
Чтобы мне получить разницу между двумя датами я использую trunc,
Как сделать, чтобы он выкидывал выходные?
Ann19 вне форума Ответить с цитированием
Старый 09.07.2012, 23:34   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы рекомендовал завести табличку, куда занести ВСЕ выходные и ПРАЗДНИЧНЫЕ дни (каждая дата - отдельная строка).
Потом выборка из этой таблицы всех выходных/праздничных дат, попавших в интервал между нужными датами.
количество таких дат и даст нужное число выходных дней.
Если же использование таблицы (и SQL) чем-то претит, тогда можно банально перебрать все даты в диапазоне в цикле, проверяя для каждой isHoliday(Дата) и уменьшая счётчик рабочих дней, если Дата - выходной.

p.s. поиском по форуму пройдитесь. были такие темы на форуме...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.07.2012, 08:35   #3
Ann19
Новичок
Джуниор
 
Регистрация: 08.07.2012
Сообщений: 4
По умолчанию

Спасибо за ответ, да, действительно темы такие были, и они описывают именно, о чем вы говорите.
Меня интересует можно ли без написания своего календаря, и тем самым исключая всю выборку выявить выходные.
Как в MonthCalendar понять выходной день или нет?
Есть такая функция DayOfWeek, которая возвращает день недели.
Дни недели можно вывести как сообщение.
Можно ли как то сделать проверку выходных?
Ann19 вне форума Ответить с цитированием
Старый 10.07.2012, 08:47   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Можно ли как то сделать проверку выходных?
если речь идёт ИСКЛЮЧИТЕЛЬНО про выходные дни (субботы и воскресения), то можно обойтись даже без перебора.
Но это вариант, разумеется, не будет учитывать праздничные дни (кои имеются в нашем рабочем производственном календаре).
Если Вас устроит такой подход - я постараюсь набросать простенький примерчик.

я же говорю, зря Вы поиском не пользуетесь!
вот на форуме было уже решение:

DateTimePicker, MonthCalendar кол-во дней
Цитата:
--------------------------------------------------------------------------------
Пользовательвыбирает диапазон времени между двумя DateTimePicker.
и подсчитываем кол-дней.
Как посчитать дни с вычетом субботы и воскресения???
смотри пост #2 (c) Kotofff

Последний раз редактировалось Serge_Bliznykov; 10.07.2012 в 08:51.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.07.2012, 12:04   #5
Ann19
Новичок
Джуниор
 
Регистрация: 08.07.2012
Сообщений: 4
По умолчанию

Спасибо огромное.
Ann19 вне форума Ответить с цитированием
Старый 10.07.2012, 20:42   #6
Ann19
Новичок
Джуниор
 
Регистрация: 08.07.2012
Сообщений: 4
По умолчанию

Программа заработала!
Но я немного не так делала, вот мой алгоритм:
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
Result: integer;
AllDays: integer;
i: integer;
begin
AllDays:= 

(trunc(DateTimePicker2.Date)-trunc(DateTimePicker1.Date))+1;
Result := AllDays;
for i := 0 to AllDays - 1 do
begin
if DayOfWeek(DateTimePicker1.Date + i) - 1 in [6, 0] then
Result := Result - 1;
end;
Edit1.Text:=IntToStr(Result);
end;



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 11.07.2012 в 00:19.
Ann19 вне форума Ответить с цитированием
Старый 11.07.2012, 00:22   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Но я немного не так делала, вот мой алгоритм:
ну, не принципиально, так тоже можно.
но в вашем случае trunc() излишни! Уберите их и проверьте - получите тот же самый результат, что и с trunc()! Впрочем, если Вам так больше нравится, то можно и так оставить - ошибки в этом нет.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Количество рабочих дней в качестве критерия alex77755 Microsoft Office Excel 25 18.04.2012 22:59
количество рабочих дней в месяце. RKS Общие вопросы Delphi 6 30.10.2010 08:00
подсчет рабочих дней ruavia3 Microsoft Office Excel 14 01.03.2010 11:22
как расчитать кол-во рабочих дней за"-" выходных??? ЦЕРЦЕЯ Microsoft Office Excel 5 30.11.2009 14:16
DateTimePicker, MonthCalendar кол-во дней Inbox Компоненты Delphi 10 30.01.2009 11:22