четверг, 1 декабря 2011 г.

Работа с датами и периодами

//функция проверяет, равен ли месяцу интервал между заданными датами 
Функция ЭтоМесяц(ДатаН,ДатаК) Экспорт
     Если Не(ДатаН=НачМесяца(ДатаН)) Тогда
          Возврат(0);
     ИначеЕсли Не(ДатаК=КонМесяца(ДатаК)) Тогда
          Возврат(0);
     ИначеЕсли ДатаН=НачМесяца(ДатаК) Тогда
          Возврат(1);
     Иначе
          Возврат(0);
     КонецЕсли;
КонецФункции
//функция возвращает количество полных месяцев между датами 
Функция гМесяцев(ДатаН,ДатаК) Экспорт
     Если ДатаН<ДатаК Тогда
          ТекДата=НачМесяца(ДатаН);
          Значение=1;
          Пока ТекДата<НачМесяца(ДатаК) Цикл
               ТекДата=ДобавитьМесяц(ТекДата,1);
               Значение=Значение+1;
          КонецЦикла;
          Возврат(Значение);
     Иначе
          Возврат(0);
     КонецЕсли;
КонецФункции
//функция определяет порядковый номер месяца в квартале
 Функция гМесяцКвартала(ДатаДок) Экспорт
     НачМесяц=ДатаМесяц(НачКвартала(ДатаДок));
     КонМесяц=ДатаМесяц(ДатаДок);
     Возврат(КонМесяц-НачМесяц+1);
КонецФункции
//функция определяет порядковый номер квартала по дате
 Функция гДатаКвартал(аДата) Экспорт
     Возврат ДатаМесяц(КонКвартала(аДата))/3;
КонецФункции

Взято с http://love1c.kiev.ua/code/global.htm#.Tte7ydXzwcs 


Как прибавить к дате день, месяц

СледующийДень = ТекущаяДата() + 60 * 60 * 24;
ДобавитьМесяц(Дата(2005, 1, 31), 1);
ДобавитьМесяц(Дата(2005, 2, 28), -1);
КонецМесяца(ДобавитьМесяц(Дата(2005, 2, 28), -1));

Функция ПолучитьДень(ИсходнаяДата, КоличествоПрибавляемыхДней)
    Запрос = НовыйЗапрос("
    |ВЫБРАТЬ
    |    ДОБАВИТЬКДАТЕ(&ИсходнаяДата, ДЕНЬ, &Количество) как Дата";
    Запрос.УстановитьПараметр("ИсходнаяДата", ИсходнаяДата);
    Запрос.УстановитьПараметр("Количество", КоличествоПрибавляемыхДней);
    ВозвратЗапрос.Выполнить().Выгрузить()[0].Дата;
КонецФункции 
 
 
http://www.about1c.ru/?prog77-functions-date