Несколько громоздская, но полезная функция.
Добавил распознование строковых месяцев, но только на русском языке.
Очень красивое решение предоставил ildarovich, советую использовать сразу его код:
Функция СтрокаВДату(Знач ФорматДаты, Знач Дано, Ошибка = Ложь) Экспорт
Попытка
ё = Формат('00010101', "ДФ=" + ФорматДаты) // - необязательная проверка первого правильности параметра
Исключение
Ошибка = Истина;
Возврат '00010101'
КонецПопытки;
Ч = Новый Соответствие;
Для ё = 1 По СтрДлина(ФорматДаты) + 7 Цикл
Ч[Сред(ФорматДаты + "dMyHhms", ё, 1)] = 0 // - инициализация частей даты
КонецЦикла;
Для ё = 1 По 12 Цикл
Дано = СтрЗаменить(Дано, Формат(Дата(1, ё, 1), "ДФ=MMММ"), Формат(ё, "ЧЦ=4; ЧВН=")); // - замена названий месяцев числами
Дано = СтрЗаменить(Дано, Формат(Дата(1, ё, 1), "ДФ=MMМ" ), Формат(ё, "ЧЦ=3; ЧВН="))
КонецЦикла;
Для ё = 1 По СтрДлина(ФорматДаты) Цикл
Ч[Сред(ФорматДаты, ё, 1)] = 10 * Ч[Сред(ФорматДаты, ё, 1)] + Найти("123456789", Сред(Дано, ё, 1)); // - накопление частей даты
Ошибка = Ошибка ИЛИ Найти("dMyHhms", Сред(ФорматДаты, ё, 1)) И НЕ Найти("0123456789", Сред(Дано, ё, 1)) // - необязательная проверка на цифры
КонецЦикла;
Ч["y"] = Ч["y"] + ?(Ч["y"] < 50, 2000, ?(Ч["y"] < 100, 1900, 0)); // - дополнение двух цифр года до четырех
Попытка
Возврат Дата(Ч["y"], Ч["M"], Ч["d"], Ч["H"] + Ч["h"], Ч["m"], Ч["s"])
Исключение
Ошибка = Истина;
Возврат '00010101'
КонецПопытки
КонецФункции
Моя функция:
Функция ПолучитьДатуИзТекста(Текст,ФорматнаяСтрока) Экспорт
Перем Значение;
ПустаяДата = '00010101';
Год = 1; Месяц=1; День = 1; час = 0; Мин=0; Сек=0;
тмпТекст = Текст;
ЗначащиеСимволы = "dMyHhms";
СтрокаПараметра = "";
ФорматнаяСтрока = СокрЛП(ФорматнаяСтрока)+" ";
ПредСимв = Лев(ФорматнаяСтрока,1);
Для к=1 по СтрДлина(ФорматнаяСтрока) Цикл
Симв = Сред(ФорматнаяСтрока,к,1);
Если ПредСимв<>Симв Тогда
Если Найти(ЗначащиеСимволы,ПредСимв)>0 Тогда
//ЭтоПараметр
Если СтрДлина(СтрокаПараметра)=2 Тогда
Попытка
Значение = Число(Лев(тмпТекст,2));
Исключение
#Если Клиент Тогда
Предупреждение("Не удалось выполнить преобразование!");
#КонецЕсли
Возврат ПустаяДата;
КонецПопытки;
тмпТекст = Сред(тмпТекст,3);
ИначеЕсли СтрокаПараметра="yyyy" Тогда
Попытка
Значение = Число(Лев(тмпТекст,4));
Исключение
#Если Клиент Тогда
Предупреждение("Не удалось выполнить преобразование!");
#КонецЕсли
Возврат ПустаяДата;
КонецПопытки;
тмпТекст = Сред(тмпТекст,5);
ИначеЕсли СтрДлина(СтрокаПараметра)=1 Тогда
дл = "";
Попытка
Значение = Число(Лев(тмпТекст,2));
Исключение
Попытка
Значение = Число(Лев(тмпТекст,1));
дл=1;
Исключение
#Если Клиент Тогда
Предупреждение("Не удалось выполнить преобразование!");
#КонецЕсли
Возврат ПустаяДата;
КонецПопытки;
КонецПопытки;
Если дл="" Тогда
Если (СтрокаПараметра = "d" и Значение>31)ИЛИ(СтрокаПараметра = "M" и Значение>12)ИЛИ(СтрокаПараметра = "H" и Значение>23)
ИЛИ(СтрокаПараметра = "h" и Значение>12)ИЛИ(СтрокаПараметра = "m" и Значение>59)ИЛИ(СтрокаПараметра = "s" и Значение>59) Тогда
Попытка
Значение = Число(Лев(тмпТекст,2));
дл=2;
Исключение
#Если Клиент Тогда
Предупреждение("Не удалось выполнить преобразование!");
#КонецЕсли
Возврат ПустаяДата;
КонецПопытки;
Иначе
Попытка
Значение = Число(Лев(тмпТекст,1));
дл=1;
Исключение
#Если Клиент Тогда
Предупреждение("Не удалось выполнить преобразование!");
#КонецЕсли
Возврат ПустаяДата;
КонецПопытки;
КонецЕсли;
КонецЕсли;
тмпТекст = Сред(тмпТекст,дл+1);
ИначеЕсли СтрокаПараметра="MMM" или СтрокаПараметра="MMMM" Тогда
Значение = 0;
Для м=1 по 12 Цикл
ТекстМесяца = Сред(Формат(Дата(2000,м,1),"ДФ=d."+СтрокаПараметра),3);
Если Найти(тмпТекст,ТекстМесяца)>0 Тогда
Значение = м;
Прервать;
КонецЕсли;
КонецЦикла;
Если Значение = 0 Тогда
#Если Клиент Тогда
Предупреждение("Не удалось выполнить преобразование!");
#КонецЕсли
Возврат ПустаяДата;
КонецЕсли;
тмпТекст = Сред(тмпТекст,СтрДлина(ТекстМесяца)+1);
Иначе
#Если Клиент Тогда
Предупреждение("Не верный формат даты или форматной строки!");
#КонецЕсли
Возврат ПустаяДата;
КонецЕсли;
//Установим параметры
Если ПредСимв = "d" Тогда
День = Значение;
ИначеЕсли ПредСимв = "M" Тогда
Месяц = Значение;
ИначеЕсли ПредСимв = "y" Тогда
Если СтрокаПараметра = "yy" Тогда
ТекВек = 100*Цел(Год(ТекущаяДата())/100);
год = ?(Значение>=Год(ТекущаяДата())-текВек+50,ТекВек-100,ТекВек)+Значение;
Иначе
Год = Значение;
КонецЕсли;
ИначеЕсли ПредСимв = "H" Тогда
час = Значение;
ИначеЕсли ПредСимв = "h" Тогда
час = Значение;
#Если Клиент Тогда
Сообщить("Вычисление часа не гарантировано.");
#КонецЕсли
ИначеЕсли ПредСимв = "m" Тогда
Мин = Значение;
ИначеЕсли ПредСимв = "s" Тогда
Сек = Значение;
КонецЕсли;
Иначе
//Это Разделитель
тмпТекст = Сред(тмпТекст,СтрДлина(СтрокаПараметра)+1);
КонецЕсли;
СтрокаПараметра = Симв;
Иначе
СтрокаПараметра=СтрокаПараметра+Симв;
КонецЕсли;
ПредСимв = Симв;
КонецЦикла;
Возврат Дата(Год,Месяц,День,час,Мин,Сек);
КонецФункции