powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поиск даты окончания периода
15 сообщений из 15, страница 1 из 1
Поиск даты окончания периода
    #38510237
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, нужна помощь с реализацией алгоритма для решения такой задачи. На вход поступает дата начала периода и количество дней в периоде. Нужно найти дату окончания периода без учета праздничных дней. Список дат праздников имеется. В лоб решается так:
1.Вычисляем дату окончания
2.Проверяем, сколько праздничных дней между датой начала и окончания
3.Запоминаем дату окончания, сдвигаем дату окончания на количество праздников.
4.Ищем праздники между запомненной и новой датой окончания и продолжаем пока будут находиться праздники.
Мне этот вариант не нравится. Помогите ,пожалуйста, найти более умное решение, может вообще без цикла.
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510248
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идём по списку праздников, упорядоченному по возрастанию дат, по дороге накапливаем рабочие дни из промежутков, пока не наберется сколько нужно, например.
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510327
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker , обозначьте среду реализации. И структуру хранения исходных данных.
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510347
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, даты праздников хранятся в реляционной базе в таблице с одним полем типа дата. Среда реализации - любая, где не используются функциональные языки. Псевдокод устроит.
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510353
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, если можно это сделать SQL запросом без привязки к возможностям конкретной СУБД, тоже подойдет.
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510361
Фотография AlexandrPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,

наверно таки sql-ем нужно, иначе просто итерация с проверкой - праздник или входной

А sql-ем, чтобы проще:
пусть период равен N и стартовая дата D_start
- все выходные и праздники в году (в годах, куда период должен заведомо уложится) заранее задаются в таблице T_Нерабочиедни (или во вью из таблиц за каждый год)
- создаем таблицу T_Вседни с D_start до заведомого конца (пусть на несколько лет вперед, ибо так или иначе нужно знать нерабочие и их задавать до заведомого конца)

тогда наш период
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
 select top N Date 
 from T_Вседни 
 where 
   (Date>=D_start)
     and
   Date not in (select Date from T_Нерабочиедни)
 order by Date
 



сюда и попадает случай, когда D_start задан нерабочим дне
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510445
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, можно обойтись и без дополнительных таблиц.

Итак, у нас есть дата начала периода, количество дней и таблица выходных/праздничных дней. Для каждого выходного посчитаем следующее: дата выходного минус дата начала минус количество выходных в этом периоде. Возьмём запись с минимальным положительным. Отнимем его от даты выходного. Вот и дата конца периода.
Потребуется три (или две? лень превращать это в текст запроса) копии исходной таблицы.
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510701
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, что учитываются только праздники, без выходных дней.

Рабочий календарь-бы помог. В реальности на него и опираются подобные задачи.
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510719
Фотография AlexandrPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanСтранно, что учитываются только праздники, без выходных дней.

Рабочий календарь-бы помог. В реальности на него и опираются подобные задачи.

так - расчет зарплат, табельный учет, производственное планирование, ...
в КАЖДОМ ГОДУ на каждом предприятии СВОИ (не только общегосударственные, а также
общегосударственные могут быть вполне рабочими у кого-то) нерабочие дни

И что - может быть какое-то предприятие ЖКХ, которое только по праздникам не работает. Ну и периоды
дежурств там сантехников или электриков.
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510728
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexandrPluswadmanСтранно, что учитываются только праздники, без выходных дней.

Рабочий календарь-бы помог. В реальности на него и опираются подобные задачи.

так - расчет зарплат, табельный учет, производственное планирование, ...
в КАЖДОМ ГОДУ на каждом предприятии СВОИ (не только общегосударственные, а также
общегосударственные могут быть вполне рабочими у кого-то) нерабочие дни

И что - может быть какое-то предприятие ЖКХ, которое только по праздникам не работает. Ну и периоды
дежурств там сантехников или электриков.
Ни одного вопроса, одни утверждения. Это что, отрицание или подтверждение правоты моего сообщения?
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510746
Фотография AlexandrPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanAlexandrPlusпропущено...


так - расчет зарплат, табельный учет, производственное планирование, ...
в КАЖДОМ ГОДУ на каждом предприятии СВОИ (не только общегосударственные, а также
общегосударственные могут быть вполне рабочими у кого-то) нерабочие дни

И что - может быть какое-то предприятие ЖКХ, которое только по праздникам не работает. Ну и периоды
дежурств там сантехников или электриков.
Ни одного вопроса, одни утверждения. Это что, отрицание или подтверждение правоты моего сообщения?

это - треп 8)
мало ли что бывает

в 1С-ах, Парусах, ... так и делается в разных модулях учета рабочего времени, причем не только
у предприятия свои нерабочие дни, но и у каждого работника
ЗЫ К тому, если назначать какие-то периоды каких-то дежурств. 8)
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510904
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexandrPlus,wadman, вас унесло слегка в сторону). Мне прекрасно известно, как это делается в "реальности". Но условие остается прежним, хранятся только даты праздников, выходные мне не нужны. Поэтому мне не нужно хранить все дни года в таблице.
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38510943
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerНо условие остается прежним, хранятся только даты праздников, выходные мне не нужны.
Тогда только с циклом.
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38511074
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerAlexandrPlus,wadman, вас унесло слегка в сторону). Мне прекрасно известно, как это делается в "реальности". Но условие остается прежним, хранятся только даты праздников, выходные мне не нужны. Поэтому мне не нужно хранить все дни года в таблице.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
  SUBDATE(`result`.`date`, INTERVAL `result`.`more_than` DAY) as `end_date` 
FROM (
  SELECT `main`.`date`, (DATEDIFF(`date`, :start_date)-(SELECT COUNT(*) FROM holiday WHERE `date`>:start_date AND `date`<`main`.`date`)-:period) as `more_than` 
  FROM holiday as `main`
  WHERE `main`.`date`>:start_date
) as `result` 
WHERE `more_than`>0
ORDER by `more_than` asc
LIMIT 1



Ну вот, если нигде не ошибся то должно определять правильно... таблица состоит из единственного столбца `date` - дата праздника (тип DATE).
Запрос не оптимизировал, так что не знаю, возможно и можно улучшить и ускорить.
Особенность: если указанный период заканчивается за пределами последнего праздника, то будет возвращён пустой результат
...
Рейтинг: 0 / 0
Поиск даты окончания периода
    #38511077
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, написано со слов Akina :)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поиск даты окончания периода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]