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

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

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

Отображения интервала между датами в виде "1 год 4 месяца 25 дней"

Я
   Olegandr
 
04.08.04 - 15:16
Как получить строку "расстояния" между двумя датами (01.01.2000 и 25.04.2001) в виде, например, "1-лет 4-месяц 25-день"
 
  Рекламное место пустует
   skunk
 
1 - 04.08.04 - 15:18
смотреть ЗиК... там должно быть... что-нить со стажем... раньше сто пудово было
   Olegandr
 
2 - 04.08.04 - 17:51
Пришла одна мысль:

Процедура ПроверкаДнейВМесяце()
    Перем КонечнаяДата;
    Перем КоличествоДней;

    СрокМесяцев=0; СрокЛет=0; СрокДней=0;
    
    СрокДней=ДатаЗаверш-ДатаНач;
    КонечнаяДата=ДатаЗаверш;
    Пока КонечнаяДата>ДатаНач Цикл
        КонечнаяДата=КонечнаяДата-1;
         Если ДатаЧисло(КонечнаяДата)=ДатаЧисло(ДатаЗаверш) Тогда
             СрокМесяцев=СрокМесяцев+1;   
         КонецЕсли;
        Если СрокМесяцев=12 Тогда
            СрокМесяцев=0;
            СрокЛет=СрокЛет+1;
        КонецЕсли;
    КонецЦикла;
        Если (ДатаЧисло(ДатаЗаверш)-ДатаЧисло(ДатаНач))<0 Тогда
            СрокДней=(ДатаЧисло(КонМесяца(ДатаНач))-ДатаЧисло(ДатаНач))+ДатаЧисло(ДатаЗаверш);    
        КонецЕсли;
        Если (ДатаЧисло(ДатаЗаверш)-ДатаЧисло(ДатаНач))=0 Тогда
            СрокДней=0;    
        КонецЕсли;
        Если (ДатаЧисло(ДатаЗаверш)-ДатаЧисло(ДатаНач))>0 Тогда
            СрокДней=ДатаЧисло(ДатаЗаверш)-ДатаЧисло(ДатаНач);    
        КонецЕсли;
КонецПроцедуры

Может кто-нить поможет разобраться последними числами месяца, те что по 31,30,29?
   alxkorvin
 
3 - 04.08.04 - 19:20
Взято из ЗиК

//******************************************************************************

//    глРазобратьРазностьДат(Дата1,Дата2,Лет,Месяцев,Дней)
//

//    Параметры:
//        Дата1    - первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату)

//        Дата2    - вторая дата (ранняя дата, с нее начинается "течение" стажа)
//        Лет        - в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2)

//        Месяцев    - в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2)
//        Дней    - в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2)

//
//    Описание:

//        Процедура разбирает две даты и возвращает в параметрах кол-во лет, месяцев и дней
//        между двумя датами (Дата1-Дата2)

//
Процедура глРазобратьРазностьДат(Знач Дата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)));
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры   // глРазобратьРазностьДат
   Olegandr
 
4 - 05.08.04 - 12:36
Окончательный вариант:

//****************************************************************************** 

//    глРазобратьРазностьДат(Дата1,Дата2,Лет,Месяцев,Дней) 
// 

//    Параметры: 
//        Дата1    - первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату) 

//        Дата2    - вторая дата (ранняя дата, с нее начинается "течение" стажа) 
//        Лет        - в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2) 

//        Месяцев    - в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2) 
//        Дней    - в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2)

//          СтроковоеЗначениеДаты - в этот параметр будет записано строковое значение даты    
// 

//    Описание: 
//        Процедура разбирает две даты и возвращает в параметрах кол-во лет, месяцев и дней 

//        между двумя датами (Дата1-Дата2) 
// 

Процедура глРазобратьРазностьДат(Знач Дата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))); 
       КонецЕсли; 
   КонецЕсли; 
       
      //добавим строковое значение даты ГОД

       Если Лет<=20 Тогда
           Если Лет=1 Тогда СтроковоеЗначениеДаты="1 год"; КонецЕсли;
           Если Лет>1 Тогда
            Если Лет<5 Тогда СтроковоеЗначениеДаты=Строка(Лет)+" года"; КонецЕсли;
           КонецЕсли;
           Если Лет>4 Тогда
               Если Лет<21 Тогда СтроковоеЗначениеДаты=Строка(Лет)+" лет"; КонецЕсли;
           КонецЕсли;
       КонецЕсли;
       
       Если Лет>20 Тогда
           Если Прав(Строка(Лет),1)="1" Тогда СтроковоеЗначениеДаты=Строка(Лет)+" год"; КонецЕсли;
           Если Число(Прав(Строка(Лет),1))>1 Тогда
               Если Число(Прав(Строка(Лет),1))<5 Тогда СтроковоеЗначениеДаты=Строка(Лет)+" года"; КонецЕсли;
           КонецЕсли;
           Если Число(Прав(Строка(Лет),1))>4 Тогда
               Если Число(Прав(Строка(Лет),1))<=9 Тогда СтроковоеЗначениеДаты=Строка(Лет)+" лет"; КонецЕсли;
           КонецЕсли;
           Если Прав(Строка(Лет),1)="0" Тогда СтроковоеЗначениеДаты=Строка(Лет)+" лет"; КонецЕсли;
           Если Лет>100 Тогда
               Если (Лет%100)>4 Тогда
                   Если (Лет%100)<21 Тогда СтроковоеЗначениеДаты=Строка(Лет)+" лет"; КонецЕсли;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
       Если Лет=0 Тогда СтроковоеЗначениеДаты=""; КонецЕсли;
    Если Лет>0 Тогда
           Если Месяцев>0 Тогда
               Если Дней=0 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+" и "; КонецЕсли;
               Если Дней>0 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+", "; КонецЕсли;
           КонецЕсли;
           Если Месяцев=0 Тогда
               Если Дней=0 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+"."; КонецЕсли;
               Если Дней>0 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+" и "; КонецЕсли;
           КонецЕсли;
      КонецЕсли;
      //добавим строковое значение даты МЕСЯЦ

       Если Месяцев<=20 Тогда
           Если Месяцев=1 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+"1 месяц"; КонецЕсли;
           Если Месяцев>1 Тогда
            Если Месяцев<5 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Месяцев)+" месяца"; КонецЕсли;
           КонецЕсли;
           Если Месяцев>4 Тогда
               Если Месяцев<21 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Месяцев)+" месяцев"; КонецЕсли;
           КонецЕсли;
       КонецЕсли;
       Если Месяцев>20 Тогда
           Если Прав(Строка(Месяцев),1)="1" Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Месяцев)+" месяц"; КонецЕсли;
           Если Число(Прав(Строка(Месяцев),1))>1 Тогда
               Если Число(Прав(Строка(Месяцев),1))<5 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Месяцев)+" месяца"; КонецЕсли;
           КонецЕсли;
           Если Число(Прав(Строка(Месяцев),1))>4 Тогда
               Если Число(Прав(Строка(Месяцев),1))<=9 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Месяцев)+" месяцев"; КонецЕсли;
           КонецЕсли;
           Если Прав(Строка(Месяцев),1)="0" Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Месяцев)+" месяцев"; КонецЕсли;
       КонецЕсли;
       Если Лет=0 Тогда
         Если Месяцев>0 Тогда
           Если Дней>0 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+" и "; КонецЕсли;         
           Если Дней=0 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+"."; КонецЕсли;
         КонецЕсли;
    КонецЕсли;
       Если Лет>0 Тогда
         Если Месяцев>0 Тогда
           Если Дней>0 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+" и "; КонецЕсли;         
           Если Дней=0 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+"."; КонецЕсли;
         КонецЕсли;
    КонецЕсли;
  
      //добавим строковое значение даты ДЕНЬ

       Если Дней<=20 Тогда
           Если Дней=1 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+"1 день."; КонецЕсли;
           Если Дней>1 Тогда
            Если Дней<5 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Дней)+" дня."; КонецЕсли;
           КонецЕсли;
           Если Дней>4 Тогда
               Если Дней<21 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Дней)+" дней."; КонецЕсли;
           КонецЕсли;
       КонецЕсли;
       Если Дней>20 Тогда
           Если Прав(Строка(Дней),1)="1" Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Дней)+" день."; КонецЕсли;
           Если Число(Прав(Строка(Дней),1))>1 Тогда
               Если Число(Прав(Строка(Дней),1))<5 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Дней)+" дня."; КонецЕсли;
           КонецЕсли;
           Если Число(Прав(Строка(Дней),1))>4 Тогда
               Если Число(Прав(Строка(Дней),1))<=9 Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Дней)+" дней."; КонецЕсли;
           КонецЕсли;
           Если Прав(Строка(Дней),1)="0" Тогда СтроковоеЗначениеДаты=СтроковоеЗначениеДаты+Строка(Дней)+" дней."; КонецЕсли;
       КонецЕсли;
       Если Дата1=Дата2 Тогда СтроковоеЗначениеДаты="Даты равны!"; КонецЕсли;
КонецПроцедуры   // глРазобратьРазностьДат 


P.S. Можно вставить число прописью.


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