Имя: Пароль:
1C
1С v8
Как красиво проверить вхождение даты (день, месяц) в период из двух дат?
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 точек.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс