Получить дату через указанное количество [дней, месяцев, лет, ...]

markers 53 3 2

Функция получает при помощи запроса дату через указанный промежуток

// Возращает дату через указанное количество в указанном типе
//
// Параметры:
//	Дата1	- Дата от которой будет производится исчисление
//	Кол		- Количество прибавляемых или убавляемых единиц указанного типа
//	Тип		- Тип исчисления, поддерживается: секунда, минута, день, час, неделя, меняс, год
//	Знак	- При значении "+" прибавляет к дате указанное количество единиц указанного типа
//			  При значении "-" отнимает от даты указанное количество единиц указанного типа
//
// По умолчанию тип разницы "День", знак равен "+". 
// Указывать тип можно в любом регистре!
// Допускается передавать отрицательное количество единиц в поле "Кол" и опускании значения "Знак"
// В таком случае функция будет считать значение параметра знак равным "-"
//
Функция ПолучитьДатуЧерез(Дата1, Кол, Знач Тип = "день", Знач Знак = "") Экспорт

	Если Кол = 0 Тогда
		Возврат Дата1;
	КонецЕсли;
	
	Тип = НРег(Тип);
	
	Если Кол < 0 и НЕ ЗначениеЗаполнено(Знак) Тогда
		Кол = Кол * -1;
		Знак = "-";
	ИначеЕсли НЕ ЗначениеЗаполнено(Знак) Тогда
		Знак = "+";
	КонецЕсли;
	
	ЗнакПлюс = ?(Знак = "+", Истина, Ложь);
	
	Если НЕ ЗнакПлюс Тогда
		
		Кол = Кол * -1;
		
	КонецЕсли;
	
	Если Тип = "сек" или Тип = "секунда" или Тип = "секунды" Тогда Тип = "СЕКУНДА"
	ИначеЕсли Тип = "мин" или Тип = "минута" или Тип = "минуты" Тогда Тип = "МИНУТА"
	ИначеЕсли Тип = "час" или Тип = "часы" Тогда Тип = "ЧАС"
	ИначеЕсли Тип = "день" или Тип = "дней" или Тип = "дни" Тогда Тип = "ДЕНЬ"
	ИначеЕсли Тип = "неделя" или Тип = "недель" или Тип = "недели" Тогда Тип = "НЕДЕЛЯ"
	ИначеЕсли  Тип = "месяц" или Тип = "месяцев" или Тип = "месяцы" Тогда Тип = "МЕСЯЦ"
	ИначеЕсли Тип = "год" или Тип = "лет" Тогда Тип = "ГОД"
	Иначе Возврат 0;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Дата", Дата1);
	Запрос.УстановитьПараметр("Кол", Кол);
	Запрос.Текст= "ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&Дата, ДЕНЬ, &Кол) КАК Значение";
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "ДЕНЬ", Тип);
	Выборка = Запрос.Выполнить().Выбрать(); 
	
	Возврат ?(Выборка.Следующий(), Выборка.Значение, 0);
	
КонецФункции
0
Орфографическая ошибка в Возращает: Возращает
Орфографическая ошибка в меняс: меняс

См. также

ДатыПоГрафику (БСП)

ДатаПоГрафику (БСП)

ДатыПоКалендарю (БСП)

ДатаПоКалендарю (БСП)

РазностьДатПоКалендарю (БСП)

Функция ВремяГода(мес)

Получить дату по номеру дня недели и его порядковому номеру в месяце

Вывод месяца строкой из даты

Определение суммарного покрытия перекрывающихся интервалов

Модератору