powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / пересечение диапазонов дат
20 сообщений из 20, страница 1 из 1
пересечение диапазонов дат
    #34651566
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Два диапазона дат, надо составить выражение возвращающее true если существует хотя бы один день, общий для этих диапазонов и false если такого дня не существует. Ну и желательно чтобы выражение было попроще. Казалось бы, вопрос простой, но я сидел, пыхтел, наконец залез в Гугл, и нашел только одно(!) описание решения. Копирую сюда, "чтоб было".
ссылка
Проверка пересечения диапазонов датСегодня на работе возник вопрос, как наиболее посто проверить, пересекаются ли два диапазона дат. Моя жена (по образованию математик, работает вместе со мной программистом) сходу выдала очень простой способ.

[BeginDate1 - EndDate1] - первый диапазон

[BeginDate2 - EndDate2] - второй диапазон

Диапазоны не пересекаются, если BeginDate2 > EndDate1 или EndDate2 < BeginDate1. Используйте отрицание и получите условие пересечения.
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34651594
Nikolay B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.Два диапазона дат, надо составить выражение возвращающее true если существует хотя бы один день, общий для этих диапазонов и false если такого дня не существует. Ну и желательно чтобы выражение было попроще. Казалось бы, вопрос простой, но я сидел, пыхтел, наконец залез в Гугл, и нашел только одно(!) описание решения.
Рассказываю алгоритм.
1) Берем лист бумаги
2) Рисуем на листке бумаги прямую линию со стрелочкой на конце.
3) Под стрелочкой, чуть ниже, рисуем T(сек.).
4) Произвольным образом отмечаем на прямой 4 точки.
5) В произвольном порядке подписываем эти точки : BeginDate1, BeginDate2, EndDate1, EndDate2
6) Смотрим
7) Думаем.
8) Пишем решение.
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34651597
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз пять приходилось решать задачу.
Всегда решал таким способом:
Код: plaintext
1.
2.
[BeginDate1 - EndDate1]
[BeginDate2 - EndDate2]

Если BeginDate2 >= BeginDate1, то

Код: plaintext
1.
BeginDate2 <= EndDate1


Это и есть условие пересечения диапазонов.

Другими словами
Код: plaintext
1.
(BeginDate2 >= BeginDate1 && BeginDate2 <= EndDate1) || (BeginDate2 < BeginDate1 && BeginDate1 <= EndDate2)
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34651848
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дааа.... математики....
BeginDate1 <= EndDate2 AND BeginDate2 <= EndDate1
Вы б еще циклами начали это решать.
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34651863
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бывает.
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34652056
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G. wrote:

> Два диапазона дат, надо составить выражение
В чем проблема-то? Диапазоны пересекаются, если конец первого диапазона
назодится позже начала второго. и Начало первого диапазона находится раньше
начала второго.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34652650
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общий алгоритм для нахождения факта пересечения любых отрезков, лежащих на одной линии

Имеются отрезки
(Line1_X1, Line1_X2)
(Line2_X1, Line2_X2)

Тест
Min(Max(Line1_X1, Line1_X2), Max(Line2_X1, Line2_X2)) >= Max(Min(Line1_X1, Line1_X2), Min(Line2_X1, Line2_X2))

Если результат положительный, то отрезки имеют хотя бы одну общую точку.

Смысл алгоритма: найти общий отрезок, принадлежащий двум заданным отрезкам (что-то типа того)

Verba volent, scripta manent
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34654928
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух ты, тут даже обсуждение пошло
Да никто и не говорил что задача- супер- пупер. Можно решить по разному. Но, желательно, чтобы решение было попроще , на пальцах, чтобы сразу видно было, что оно правильное. Потому и запостил сюда, потому что понравилось.

Nikolay B.
Рассказываю алгоритм.
1) Берем лист бумаги
2) Рисуем на листке бумаги прямую линию со стрелочкой на конце.
3) Под стрелочкой, чуть ниже, рисуем T(сек.).
4) Произвольным образом отмечаем на прямой 4 точки.
5) В произвольном порядке подписываем эти точки : BeginDate1, BeginDate2, EndDate1, EndDate2
6) Смотрим
7) Думаем.
8) Пишем решение.Николай, сходите сюда и скажите, под какое именно из определений алгоритма попадает ваш. Где в определениях алгоритма написано "смотрим", "думаем", и т.д. А насчет произвольного порядка- вы предлагаете решать задачу методом Монте- Карло?
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34654938
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, ErV - спасибо.
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34655449
Nikolay B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.Николай, сходите сюда и скажите, под какое именно из определений алгоритма попадает ваш.

Спасибо, не пойду. Верю, что под определение не попадет. Однако сути это не меняет.
S.G.
А насчет произвольного порядка- вы предлагаете решать задачу методом Монте- Карло?
Ответ : нет.
Встречный вопрос : Вы предлагаете считать, что на сравнение диапазоны нам приходят исключительно в виде BeginDate1<=EndDate1 и BeginDate2<=EndDate2 ?
Дополнительный вопрос : А почему ж Вы тогда не считает, что и BeginDate1<=EndDate2 ?
Тогда вообще все решается одним сравнением.
Какое элегантное решение! Ну просто - Ох! Какое удовольствие решать задачу для идеальных условий!
НЛ, как говориться.
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34655467
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.White Owl, ErV - спасибо.
хм... а если один диапазон является частью другого диапазона, то это разве не является пересечением?
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34655470
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikolay B.Ох! Какое удовольствие решать задачу для идеальных условий!
+1 Золотые слова :)
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34657646
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan Blackхм... а если один диапазон является частью другого диапазона, то это разве не является пересечением?Является. Что тебя смущает?
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #34657701
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Dan Blackхм... а если один диапазон является частью другого диапазона, то это разве не является пересечением?Является. Что тебя смущает?
Уже ничего :-) ляпнул, не подумавши ;)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
пересечение диапазонов дат
    #38789685
feniks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как быть если число отрезков может быть более 2х и в каждом случае различно, как быть?
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #38789736
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feniks , тогда - по индукции

Ищем пересечение первых двух, затем пересечение ПЕРЕСЕЧЕНИЯ с третьим и т.д.
Выход - либо при отсутствии пересечения на каком-то этапе, либо когда отрезки закончатся.
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #38789740
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я когда-то решил эту задачу для бесконечных диапазонов слева или справа. И для вариантов
разных сочетаний конечных и бесконечных.
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #38789965
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feniksА как быть если число отрезков может быть более 2х и в каждом случае различно, как быть?надо начать с постановки своей задачи.
результат будет true когда:
- все пары диапазонов (отрезков?) имеют пересечение в одной и той же дате, или
- каждая пара имеет пересечение хотя бы в одной дате, или
- хотя бы одна пара имеет пересечение
?
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #38790194
feniks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Постановка задачи такая.
Запрос возвращает таблицу следующего вида (лицевой более чем в 1-м договоре):
Договор Лицевой ДатаНачала ДатаОкончания1 2 01.01.2014 31.01.20142 2 01.02.2014 01.01.20453 3 01.01.2014 31.01.20144 3 01.02.2014 01.01.20455 3 01.03.2014 01.04.2014

Один лицевой встречающийся в 2-х и более договорах, необходимо проверить на пересечение диапазонов дат ДатаНачала и ДатаОкончания. Если есть пересечения, это ошибка.
Результат нужен в виде таблицы пересекающихся дат лицевых счетов, для их дальнейшего разбора.

Таблица пересечений:
Договор Лицевой ДатаНачала ДатаОкончания ПризнакПересечения3 3 01.01.2014 31.01.2014 04 3 01.02.2014 01.01.2045 15 3 01.03.2014 01.04.2014 1

Средства решения задачи: T-SQL.
Вот какая вот задача :)
...
Рейтинг: 0 / 0
пересечение диапазонов дат
    #38790316
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feniksОдин лицевой встречающийся в 2-х и более договорах, необходимо проверить на пересечение диапазонов дат ДатаНачала и ДатаОкончания. Если есть пересечения, это ошибка.Значит, это приблизительно третий случай в моем вопросе. Надо рассмотреть все пары диапазонов. Через sql я бы решил, используя соединение "таблицу следующего вида" саму с собой, по условию равенства поля "лицевой".
Что-то в виде
select * // здесь процедура сравнения двух диапазонов, из T1 и T2
from TSV T1
join TSV T2 on (T1.лицевой = T2.лицевой ) and (T1.договор > T2.договор)
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / пересечение диапазонов дат
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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