![]() |
|
Как красиво проверить вхождение даты (день, месяц) в период из двух дат? | ☑ | ||
---|---|---|---|---|
0
Pro1001C
09.07.19
✎
21:35
|
Что-то не соображу, подскажите, пожалуйста
Как красиво проверить вхождение даты, которая состоит из дня и месяца в интервал дат, которые так же состоят из дня и месяца? Например, нужно проверить, входит ли дата 9 июля в интервал с 1 октября по 1 марта? При этом интервал дат может быть любым, заранее заданным, например: с 1 января по 1 мая, или с 1 июня по 5 июня, или с 30 декабря по 29 февраля Пока, тупо как перебором всех возможных вариантов сравнения, ничего в голову не приходит |
|||
1
mikecool
09.07.19
✎
21:37
|
запрос и разностьдат
|
|||
2
zwolf
09.07.19
✎
22:07
|
(1) А можно еще вебсервис написать и парочку XTDO пакетов. Скоро на SQL сервер будете ходить, чтобы 2 на 2 умножить, разработчики...
(0) Выбери любой фиксированный високосный год, сделай с его участием три даты (через день, месяц и выбраный год) и тупо сравни. Если месяц конца интервала больше месяца начала, то надо уточнять условия - это неверные параметры или для датв конца надо к году прибавить единичку. |
|||
3
zwolf
09.07.19
✎
22:08
|
(2)+
> месяц конца интервала больше месяц конца интервала меньше, ессно |
|||
4
palsergeich
09.07.19
✎
22:43
|
2 даты.
Одна заведомо меньше другой. Условие такое ДатаИнтервалаМинимум< ДатаПроверяемая < ДатаИнтервалаМаксимум В зависимости от условия знак может быть и <= |
|||
5
palsergeich
09.07.19
✎
22:44
|
Конкретно в "1 октября по 1 марта" этом случае надо просто хранить год
1 октября 17 и 1 марта 18 и задача сводится к неравенству в (4) Да хоть на 0001 и 0002 году |
|||
6
Pro1001C
09.07.19
✎
22:54
|
Т.е. приводит проверяемую дату к нужному "формату проверяемого диапазона", например, 0001 и 0002гг. и сравниваем.
Понятно, спасибо. Я начал сравнивать через день и месяц, работает, но кода больше |
|||
7
ILM
гуру
10.07.19
✎
06:11
|
МЕЖДУ МЕСЯЦ(&Период1) *100 + ДЕНЬ(&Период1) И МЕСЯЦ(&Период2) *100 + ДЕНЬ(&Период2)
|
|||
8
Вася Теркин
10.07.19
✎
06:15
|
(2) Сдвинуть даты надо
НормализованныйКонец = НомерДняГода(КонецИнтервала) - НомерДняГода(НачалоИнтервала); НормализованныйКонец = ?(НормализованныйКонец > 0, НормализованныйКонец, 366 + НормализованныйКонец); НормализованнаяДата = НомерДняГода(НашаДата) - НомерДняГода(НачалоИнтервала); НормализованнаяДата = ?(НормализованнаяДата > 0, НормализованнаяДата, 366 + НормализованнаяДата); Возврат НормализованныйКонец > НормализованнаяДата; |
|||
9
Сияющий в темноте
10.07.19
✎
08:37
|
Поди в задаче день рождения а периоде,и не все так просто.
хотя,вариант с 366 дней для високосного года и проверка наличия числа в отрезке на множестве из 366 точек. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |