Создание двухнедельного цикла без выходных в Delphi: функционал GerhardiTecDayOfWeek
Вопрос, поставленный пользователем, заключается в создании цикла, который охватывает две недели, начиная с понедельника как первого дня (день 1) и заканчивая следующим понедельником как шестым днем (день 6) второй недели. Важно отметить, что в цикл не включаются выходные дни.
Решение проблемы
Для решения задачи пользователь может использовать функцию GerhardiTecDayOfWeek, которая принимает дату в виде TDateTime и возвращает номер дня в рамках двухнедельного цикла. Функция основана на массиве Map, где индексы соответствуют остатку от деления даты на 14 дней, что позволяет обойти ограничение на выходные дни.
function GerhardiTecDayOfWeek(nDate: TDateTime): Integer;
const
Map: array[0..13] of Integer = (5, 5, 6, 7, 8, 9, 10, 10, 10, 1, 2, 3, 4, 5);
begin
Result := Map[Trunc(nDate) mod 14];
end;
Пример работы функции
Давайте рассмотрим, как функция GerhardiTecDayOfWeek работает на примере:
| Дата | Остаток от деления на 14 | Результат |
|------------|-------------------------|-----------|
| 03.03.2014 | 9 | 1 |
| 04.03.2014 | 10 | 2 |
| ... | ... | ... |
| 17.03.2014 | 9 | 1 |
Объяснение работы функции
Дата в Delphi хранится в виде вещественного числа, где целое число представляет количество дней с определенной базовой даты (30.12.1899), а дробная часть - время. Функция Trunc используется для получения целой части даты. Операция деления с остатком (mod 14) позволяет получить число от 0 до 13, которое используется для индексации массива Map.
Массив Map инициализирован таким образом, чтобы соответствовать логике двухнедельного цикла, где дни с понедельника по пятницу идут под номерами от 1 до 5, а затем с понедельника следующей недели - под номерами от 6 до 10.
Функция работает с датами после 30.12.1899. Если необходимо обрабатывать даты до этой даты, функция может быть модифицирована для работы с отрицательными остатками.
Комментарий пользователя
Пользователь выразил благодарность за работу функции и попросил объяснить принцип её работы. Объяснение, представленное выше, должно помочь понять, как функция GerhardiTecDayOfWeek обрабатывает входные даты и возвращает соответствующие номера дней в рамках двухнедельного цикла.
Это решение можно использовать в проектах на Delphi для создания двухнедельного цикла, где выходные дни исключены из расчета.
Создание двухнедельного цикла без учета выходных в программировании на Delphi с использованием функции `GerhardiTecDayOfWeek`, которая определяет день в рамках этого цикла по заданной дате.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.