Имя: Пароль:
1C
 
Разность дат в годах
0 denk
 
09.09.25
11:22
Помогите, пожалуйста, разобраться в следующей ситуации. Есть две даты: 01.09.2025 и 29.10.2024. В запросе РАЗНОСТЬДАТ(&Дата1, &Дата2, ГОД) возвращает 1. А мне надо посчитать количество лет, как разницу между двумя этими датами, желательно, в запросе. В данном случае, количество лет должно быть равно 0. Отнимать 1 от результата тоже не вариант, т.к. в определенных ситуациях считается неправильно. Может, есть какие функции в общих модулях?
1 Mankubus
 
09.09.25
11:31
Получить разность дат в днях, разделить на количество дней и округлить до целого
2 lEvGl
 
гуру
09.09.25
11:34
(1) для точности можно в секундах
правда в разных годах разное количество что секунд что дней
3 maxab72
 
09.09.25
11:37
РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ТоварыНаБухтах.Бухта.ДатаИзготовления, ГОД), НАЧАЛОПЕРИОДА(ТоварыНаБухтах.Регистратор.Дата, ГОД), ГОД)

есть железное правило, всегда сравнивать объекты только одного типа, а значит перед сравнением переводить в один тип.
4 программистище
 
09.09.25
11:40
Может тогда в месяцах кратно 12?
5 программистище
 
09.09.25
11:41
(3) для периода в 1 месяц получим разницу в год, если по разные стороны от 1 января
6 maxab72
 
09.09.25
11:46
(5) Приводи типы к единообразию:
РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2024, 12, 15), МЕСЯЦ), НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2025, 01, 15), МЕСЯЦ), МЕСЯЦ) Ответ 1
7 KJlag
 
09.09.25
11:48
(6) полный год не прошел.
в (0) он просит чтобы тут был 0.
он же привел пример с 01.09.2025 и 29.10.2024
8 Гена
 
гуру
09.09.25
11:55
(6) Сколько раз талдычить, что месяцы анизотропны. Нельзя их вычитать, только прибавлять по стреле времени от прошлого в будущее.

Надо в цикле просто добавлять год к Дата1, ну и счётчик (как раз лет), пока Дата1Новая не превысит Дата2.
Точнее:
Дата1Новая = ДобавитьМесяц(Дата1Новая, 12);
9 Гена
 
гуру
09.09.25
12:03
Единственно дописать веточку для Романова дня как Дата1.
10 dmt
 
09.09.25
12:17
11 Сергиус
 
09.09.25
13:06
(6)РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2024, 12, 15), МЕСЯЦ), НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2026, 01, 15), МЕСЯЦ), ДЕНЬ) - лучше в днях считать, хотя для високостных годов могут быть нюансы.
12 denk
 
09.09.25
13:06
Всем спасибо. В (10) мощный инструмент, конечно. AI набирает обороты.
13 Lama12
 
09.09.25
13:13
(12) 28 феврали обычного года и 28 февраля високосного года, год прошел или нет?
14 denk
 
09.09.25
13:30
(13) Для данной задачи - год прошел. Если заказчик не скажет обратного. Задача - посчитать количество лет, которое ТМЦ лежит  на складе после покупки.
15 ptiz
 
09.09.25
13:35
(14) Считай месяцы и дели на 12
16 Волшебник
 
09.09.25
13:36
(14) Дней / 365
17 lEvGl
 
гуру
09.09.25
14:11
надо думать, что с днями, как и с годами, могут быть неточности
Выбрать РазностьДат(ДатаВремя(2025, 2, 2, 23, 59, 59), ДатаВремя(2025, 2, 3), День)
= 1
18 spiller26
 
09.09.25
14:31
(16)
ВЫБРАТЬ
   ВЫБОР
       КОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Дата, ГОД), КОНЕЦПЕРИОДА(&Дата, ГОД), ДЕНЬ) = 364
           ТОГДА "Не високосный"
       ИНАЧЕ "Високосный"
   КОНЕЦ КАК ПолеВысокосность
19 crotnn
 
09.09.25
14:33
(0) Если в запросе, то
ВЫБОР
        КОГДА &ДатаОкончания > ДОБАВИТЬКДАТЕ(&ДатаНачала, МЕСЯЦ, 12 * РАЗНОСТЬДАТ(&ДатаНачала, &ДатаОкончания, ГОД))
            ТОГДА РАЗНОСТЬДАТ(&ДатаНачала, &ДатаОкончания, ГОД)
        ИНАЧЕ РАЗНОСТЬДАТ(&ДатаНачала, &ДатаОкончания, ГОД) - 1
    КОНЕЦ КАК ПолныхЛет

(14) Только считает именно полные года, т.е. 28.02.23-28.02.24 - год не прошел.