Автор: 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'
КонецПопытки
КонецФункции