Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создание двухнедельного цикла без выходных в Delphi: функционал `GerhardiTecDayOfWeek`

Delphi , Синтаксис , Дата и Время

Создание двухнедельного цикла без выходных в 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Дата и Время ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 14:53:00/0.0035421848297119/0