Функция для преобразование строки в дату 1С 8.3

Появилась идея написание своего велосипеда или идеальной функции для преобразования строки в дату.

Функция ПолучитьДатуИзСтроки(Знач Стр)
	
	ПустаяДата = Дата("00010101000000");
	Если ПустаяСтрока(Стр) Тогда
		Возврат Стр;
	КонецЕсли;
	
	Стр = СокрЛП(НРег(Стр));
	Стр = СтрЗаменить(Стр, "января",	"01");  
	Стр = СтрЗаменить(Стр, "февраля", 	"02"); 
	Стр = СтрЗаменить(Стр, "марта", 	"03"); 
	Стр = СтрЗаменить(Стр, "апреля",  	"04");
	Стр = СтрЗаменить(Стр, "мая",  		"05"); 
	Стр = СтрЗаменить(Стр, "июня",  	"06"); 
	Стр = СтрЗаменить(Стр, "июля",  	"07"); 
	Стр = СтрЗаменить(Стр, "августа", 	"08"); 
	Стр = СтрЗаменить(Стр, "сентября", 	"09"); 
	Стр = СтрЗаменить(Стр, "октября",  	"10"); 
	Стр = СтрЗаменить(Стр, "ноября",  	"11"); 
	Стр = СтрЗаменить(Стр, "декабря",  	"12");
	
	Стр = СтрЗаменить(Стр, ":",  	" ");
	Стр = СтрЗаменить(Стр, "t",  	" ");
	Стр = СтрЗаменить(Стр, "z",  	" ");
	Стр = СтрЗаменить(Стр, "+",  	" ");
	Стр = СтрЗаменить(Стр, Символы.НПП,  	" ");
	
	Д = СтрРазделить(Стр,".-/, ");
		
	Для сч = 0 по Д.ВГраница() Цикл
		Если СтрДлина(Д[сч])=1 Тогда
			Д[сч] = "0"+Д[сч];
		КонецЕсли;
	КонецЦикла;
	
	Если Д.Количество() = 1 И СтрДлина(Стр)=8 ИЛИ СтрДлина(Стр)=14 Тогда
		
		Результат = Стр;
		
	ИначеЕсли Д.Количество() = 2  И (СтрДлина(Стр) = 15 ИЛИ СтрДлина(Стр) = 13)  Тогда  //20130225T182510  ИЛИ 20130225T1825		
		
		Результат = СтрСоединить(Д);
		
	ИначеЕсли Д.Количество() < 3 Тогда    		
		
		Возврат ПустаяДата; 
		
	Иначе 	
		
		Если СтрДлина(Д[0]) = 4 Тогда //Формат гггг.мм.дд
			Результат = Д[0] + Д[1] + Д[2];
		ИначеЕсли СтрДлина(Д[0]) < 3 Тогда //формат дд.мм.гггг
			Результат = ?(СтрДлина(Д[2])=2,"20"+Д[2],Д[2]) + Д[1] + Д[0];
		Иначе
			Возврат ПустаяДата;
		КонецЕсли;
		
		Если Д.Количество() = 5 Тогда  
			Результат = Результат + Д[3] + Д[4];
		КонецЕсли;
		
		Если Д.Количество() > 5 Тогда  
			Результат = Результат + Д[3] + Д[4] + Д[5];
		КонецЕсли;
		
	КонецЕсли;
	
	Попытка
		Возврат Дата(Результат);
	Исключение
		Возврат ПустаяДата;
	КонецПопытки;
	
КонецФункции // ПолучитьДатуИзСтроки()

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии