Вход | Регистрация

1С:Предприятие ::

Метки: дата и время

Операции с датами

Я
   Kudryashka
 
28.05.04 - 11:28
Задача такая: есть ДатаНач и ДатаКон. нужно вычесть из ДатыКон ДатуНач и посчитать точное количество лет, месяцев, дней из подучившегося числа... нужно учесть високосные года, к-во дней в разных месяцах и т.д... короче нужно посчитать стаж с точностью до дня. помогите новичку... :(
 
  Рекламное место пустует
   kadr
 
1 - 28.05.04 - 11:33
//    глРазобратьРазностьДат(Дата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)));
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры   // глРазобратьРазностьДат


З.Ы. Специально для BorisG: (с) 1С
   _student
2 - 28.05.04 - 11:34
Посмотри глобальном модуле. Там полно всяких подобных расчетов.


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