|
Пересечение периодов
|
|||
---|---|---|---|
#18+
Имеются две даты D1 и D2 начала и конца одного периода, D3 и D4 - другого периода. Как определить, пересекаются ли эти периоды? Важен сам факт пересечения. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 15:51 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
Виктор В, ну и вопросик. А самому подумать? Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 16:01 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
проходящий., не-а :) , вот так: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 16:06 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
хотя, и так и так :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 16:10 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
Виктор ВИмеются две даты D1 и D2 начала и конца одного периода, D3 и D4 - другого периода. Как определить, пересекаются ли эти периоды? Важен сам факт пересечения. если записать условие непересечения: d3>d2 - дата начала второго периода больше даты конца первого периода и d1>d4 - дата начала первого периода больше даты конца второго то, условием пересечения будет !(d3>d2 or d1>d4) что равносильно d3<=d2 and d1<=d4 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 16:29 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
поправка: Анатолий Широковесли записать условие непересечения: d3>d2 - дата начала второго периода больше даты конца первого периода или d1>d4 - дата начала первого периода больше даты конца второго ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 16:43 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
Анатолий Широков, Ваш вариант наилучший по полноте и кстати единственно правильный, так как должно быть <= , а не просто < , равенство дат это тоже пересечение. Всё равно всем спасибо, просто придираюсь. Я на самом деле ожидал какую-нибудь функцию FoxPro, но такой по видимому не существует. А если первый период равен полному месяцу, алгоритм проверки такой же, т.е. определяю D1, D2 и далее как обычно? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 17:10 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
Виктор ВАнатолий Широков, Ваш вариант наилучший по полноте и кстати единственно правильный, так как должно быть <= , а не просто < , равенство дат это тоже пересечение.А это смотре где, когда и при каких условиях. К тому же, ВСЕ условия задач в приличном обществе ссобщают ДО решенияя, а не после. Всё равно всем спасибо, просто придираюсь. Я на самом деле ожидал какую-нибудь функцию FoxPro,На каком основании, позвольте полюбопытствовать? но такой по видимому не существует. Видимо, так как нигде еще такой не видел. А если первый период равен полному месяцу, алгоритм проверки такой же, т.е. определяю D1, D2 и далее как обычно?А где хоть раз был какие-то упоминания про месяцы и их полноту? Или еще одно из словий задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 17:16 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
проходящий., ну вот Вы тоже придираетесь. Дополнительных условий нет, скорее это вторая задача, частный случай первой. А мысль про функцию появилась потому что думать не хотелось, конец пятницы... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 18:20 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
Виктор В, насчёт единственно правильного варианта - как Вам такой: Код: plaintext
ЗЫ. А причём тут полные месяцы? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 18:49 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
tanglirнасчёт единственно правильного варианта - как Вам такой: Код: plaintext
В синтаксисе FoxPro это записыается так Код: plaintext 1. 2.
Однако проблема в том, что подобную конструкцию невозможно будет использовать напрямую в командах Select-SQL, поскольку существуют внутреннии функции собственно команды Select-SQL с теми же именами. Поэтому придется оборачивать такую конструкцию в функцию или макроподстановку. Что не очень удобно. tanglirВ предыдущем варианте нужно проверять ещё, что сами интервалы заданы верно, а в моём нет )) В вашем варианте тоже надо это проверять. Если, например, поменяли местами даты начала и конца интервала, то результат будет не корректным. Так что, в смысле проверки варианты равнозначны. Если вы имели в виду, что предыдущий вариант как-то зависит от того, какой интервал первый, а какой второй, так он от этого не зависит. Условие пересечение интервалов формулируется так: Дата окончания первого интервала должна быть не больше даты начала второго (d3 <= d2) И Дата окончания второго интервала должна быть не больше даты начала первого (d1 <= d4) Как видите, в таком условии совершенно не важно, какой интервал "первый", а какой "второй", поскольку условие "симметрично". Если поменять местами интервалы, то просто поменяются местами два условия объединенных по "И". Результат от этого не изменится. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 19:21 |
|
Пересечение периодов
|
|||
---|---|---|---|
#18+
ВладимирМtanglirнасчёт единственно правильного варианта - как Вам такой: Код: plaintext
В синтаксисе FoxPro это записыается так Код: plaintext 1. 2.
Я в mysql-ном синтаксисе написал. Задумался, видно. Про фоксовый синтаксис в курсе. О, нашёл очепятку. Если по-фоксовому, то min(d2,d4)>=max(d1,d3). Т.е. минимальное завершение больше либо равно максимальному началу. Будет симметрично, но проверять валидность дат начала и конца придётся, тут я прошляпил, признаю. И кстати, min(d2,d4)-max(d1,d3) = длина интервала (если отрицательная, то длина отрезка между интервалами). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2009, 20:31 |
|
|
start [/forum/topic.php?fid=41&msg=36179419&tid=1586091]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 325ms |
total: | 458ms |
0 / 0 |