Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как красиво проверить вхождение даты (день, месяц) в период из двух дат?

Как красиво проверить вхождение даты (день, месяц) в период из двух дат?
Я
   Pro1001C
 
09.07.19 - 21:35
Что-то не соображу, подскажите, пожалуйста

Как красиво проверить вхождение даты, которая состоит из дня и месяца в интервал дат, которые так же состоят из дня и месяца?

Например, нужно проверить, входит ли дата 9 июля в интервал с 1 октября по 1 марта?
При этом интервал дат может быть любым, заранее заданным, например: с 1 января по 1 мая, или с 1 июня по 5 июня, или с 30 декабря по 29 февраля

Пока, тупо как перебором всех возможных вариантов сравнения, ничего в голову не приходит
 
 
   mikecool
 
1 - 09.07.19 - 21:37
запрос и разностьдат
   zwolf
 
2 - 09.07.19 - 22:07
(1) А можно еще вебсервис написать и парочку XTDO пакетов. Скоро на SQL сервер будете ходить, чтобы 2 на 2 умножить, разработчики...

(0) Выбери любой фиксированный високосный год, сделай с его участием три даты (через день, месяц и выбраный год) и тупо сравни. Если месяц конца интервала больше месяца начала, то надо уточнять условия - это неверные параметры или для датв конца надо к году прибавить единичку.
   zwolf
 
3 - 09.07.19 - 22:08
(2)+
> месяц конца интервала больше
месяц конца интервала меньше, ессно
   palsergeich
 
4 - 09.07.19 - 22:43
2 даты.
Одна заведомо меньше другой.
Условие такое
ДатаИнтервалаМинимум< ДатаПроверяемая < ДатаИнтервалаМаксимум
В зависимости от условия знак может быть и <=
   palsergeich
 
5 - 09.07.19 - 22:44
Конкретно в "1 октября по 1 марта" этом случае надо просто хранить год
1 октября 17 и 1 марта 18 и задача сводится к неравенству в (4) 
Да хоть на 0001 и 0002 году
   Pro1001C
 
6 - 09.07.19 - 22:54
Т.е. приводит проверяемую дату к нужному "формату проверяемого диапазона", например, 0001 и 0002гг. и сравниваем.
Понятно, спасибо.
Я начал сравнивать через день и месяц, работает, но кода больше
   ILM
 
7 - 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 точек.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.