Имя: Пароль:
1C
 
Как посчитать количество дней в интервале ?
0 Selma
 
05.11.08
10:43
подскажите пожалуйста, есть ли какая нибудь обработка, которая быстро посчитает, сколько дней в интрвале от Дата1 по Дата2?
1 Greeen
 
05.11.08
10:44
Дата2 - Дата1
2 chelentano
 
05.11.08
10:44
Дата2-Дата1
3 Selma
 
05.11.08
10:47
ой, правда...)) Спасибо, не знала. А я тут  через запрос считала.((
4 de Bug
 
05.11.08
10:49
Дата2 - Дата1 + 1
5 Злопчинский
 
05.11.08
10:50
в интервале "5 ноября 2008 г - 5 ноября 2008 г" - сколько дней...???
6 rs_trade
 
05.11.08
10:51
(0) в конфигурации ЗиК есть такая функция в глобальнике...
7 rs_trade
 
05.11.08
10:54
Собственно вот она...

//******************************************************************************
//    глРазобратьРазностьДат(Дата1,Дата2,Лет,Месяцев,Дней)
//
//    Параметры:
//        Дата1    - первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату)
//        Дата2    - вторая дата (ранняя дата, с нее начинается "течение" стажа)
//        Лет        - в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2)
//        Месяцев    - в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2)
//        Дней    - в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2)
//
//    Описание:
//        Процедура разбирает две даты и возвращает в параметрах кол-во лет, месяцев и дней
//        между двумя датами (Дата1-Дата2)
//
       // алгоритм Пенсионного фонда
       //Мк = ДатаМесяц(Дата1);
       //Гк = ДатаГод(Дата1);
       //Если ДатаЧисло(Дата1) - ДатаЧисло(Дата2) < 0 Тогда
       //    Дней = ДатаЧисло(Дата1) - ДатаЧисло(Дата2) + 30;
       //    Мк = Мк - 1;
       //Иначе
       //    Дней = ДатаЧисло(Дата1) - ДатаЧисло(Дата2);
       //КонецЕсли;
       //Если Мк - ДатаМесяц(Дата2) < 0 Тогда
       //    Месяцев = Мк - ДатаМесяц(Дата2) + 12;
       //    Гк = Гк - 1;
       //Иначе
       //    Месяцев = Мк - ДатаМесяц(Дата2);
       //КонецЕсли;
       //Лет    = Гк-ДатаГод(Дата2);
       //Дней = Дней + 1;
       //Если Дней >= 30 Тогда
       //    Дней = 0;
       //    Месяцев = Месяцев + 1;
       //КонецЕсли;
       //Если Месяцев = 12 Тогда
       //    Месяцев = 0;
       //    Лет    = Лет + 1
       //КонецЕсли;
Процедура глРазобратьРазностьДат(Знач Дата1,Знач Дата2,Лет=0,Месяцев=0,Дней=0) Экспорт

   Лет = 0; Месяцев = 0; Дней = 0;
   Если Дата1>Дата2 Тогда
       
       ВременнаяДата = Дата1;
       Если ДатаЧисло(ВременнаяДата)<ДатаЧисло(Дата2) Тогда
           Дней = ВременнаяДата-ДобавитьМесяц(ВременнаяДата,-1);
           ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-1);
       КонецЕсли;
       Если ДатаМесяц(ВременнаяДата)<ДатаМесяц(Дата2) Тогда
           ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-12);
           Месяцев = 12;
       КонецЕсли;
       Лет        = Макс(             ДатаГод  (ВременнаяДата)-ДатаГод  (Дата2),0);
       Месяцев    = Макс(Месяцев    +ДатаМесяц(ВременнаяДата)-ДатаМесяц(Дата2),0);
       Дней    = Макс(Дней        +ДатаЧисло(ВременнаяДата)-ДатаЧисло(Дата2),0);
       
       // скорректируем отображаемое значение, если "вмешалось" разное количество дней в месяцах
       Если Дата2 <> (ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней) Тогда
           Дней = Дней + (КонМесяца(Дата2)-НачМесяца(Дата2)) - (КонМесяца(ДобавитьМесяц(Дата1,-1))-НачМесяца(ДобавитьМесяц(Дата1,-1)));
       КонецЕсли;
   КонецЕсли;

КонецПроцедуры    // глРазобратьРазностьДат
8 NikVars
 
05.11.08
11:13
(6) (7) Если говорить о количестве дней и только о количестве дней, то считать только как (4). Я с ним согласен (но с Дата1 по Дата1 включая обе даты в период!)! А про лет, месяцев вопроса не было.
9 Злой Бобр
 
05.11.08
11:14
(7) Жесть
10 rs_trade
 
05.11.08
11:15
(8) да мало ли...вдруг человеку пригодиться и такой вариант...
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой