Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save evgenylavelin-xx/f1637be7c4016ec370dd to your computer and use it in GitHub Desktop.
Save evgenylavelin-xx/f1637be7c4016ec370dd to your computer and use it in GitHub Desktop.
// Автор: Сергей (ildarovich, http://infostart.ru/profile/28527/)
Функция СтрокаВДату(Знач ФорматДаты, Знач СтрокаСДатой, Ошибка = Ложь) Экспорт
Попытка
тест = Формат('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'
КонецПопытки
КонецФункции // СтрокаВДату
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment