|
Как красиво проверить вхождение даты (день, месяц) в период из двух дат?
| ☑ |
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 точек.
|
|