Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Приведение строки к типу "Дата"
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > База знаний > Наши статьи > 1С Предприятие 8
Vofka
Мне уже не в первой имеется надобность имея строку вида "20.07.2011" привести её к типу значения Дата (ну чтоб в запросе вставить куда-то, или записать в какой-то объект или... или...). К сожалению нету в 1С встроенной функции, которая могла бы помочь в этом деле. "А что же делать?", - спросят новички. А сделать надо следующее:
Функция ПривестиКТипуДата(СтрДата)
    День = Сред(СтрДата, 1, 2);
    Месяц = Сред(СтрДата, 4, 2);
    Год = Сред(СтрДата, 7, 4);
    Возврат(Дата(Год+Месяц+День));
КонецФункции

Ничего сложного нету. Спасибо за внимание smile.gif
DartRomanius
Цитата(Vofka @ 20.07.11, 15:29) необходимо зарегистрироваться для просмотра ссылки
Мне уже не в первой имеется надобность имея строку вида "20.07.2011" привести её к типу значения Дата (ну чтоб в запросе вставить куда-то, или записать в какой-то объект или... или...). К сожалению нету в 1С встроенной функции, которая могла бы помочь в этом деле. "А что же делать?", - спросят новички. А сделать надо следующее:
Функция ПривестиКТипуДата(СтрДата)
        ...........
    Возврат(Дата(Год+Месяц+День));
КонецФункции

........................


Возможен вариант когда не сработает. Тогда так:
Возврат Дата(Год+Месяц+День+"000000");
Vofka
Цитата
Возможен вариант когда не сработает.

Например?
DartRomanius
Цитата(Vofka @ 20.07.11, 15:59) необходимо зарегистрироваться для просмотра ссылки
Например?


За давностью точно не помню. Что-то с настройками региональными или еще где. icon_kos7.gif
Короче лечилось просто полным указанием всей строки даты, то есть полный формат "ГГГГММДДччммсс"
Vladal
Нашел на необходимо зарегистрироваться для просмотра ссылки.
    // для тестов:
    //Сообщить(СтрокаВДату("20:01:0"));    
    //Сообщить(СтрокаВДату("27/08\2015 3-15-22"));
    //Сообщить(СтрокаВДату(20150320220315));
    //Сообщить(СтрокаВДату("2/3/55"));
    //Сообщить(СтрокаВДату("05/3/15"));
    //Сообщить(СтрокаВДату("1 ФеВраЛя 05 г. 20:01:0"));    
    //Сообщить(СтрокаВДату("1 янв. 2005 г ::"));    
    //Сообщить(СтрокаВДату("1 янв 2005г. ::01"));
    //Сообщить(СтрокаВДату("1 янв 2005г ::01"));    
    //Сообщить(СтрокаВДату("1 ФеВраЛь 05 г. 0:02:"));
    //Сообщить(СтрокаВДату("1 янВа 2005 г. 20:01"));
    //Сообщить(СтрокаВДату("02/04/2015"));
    //Сообщить(СтрокаВДату("20150320220315"));
    //Сообщить(СтрокаВДату("27.08.2015 3:15:22"));
    //Сообщить(СтрокаВДату("27.08-2015 5:24"));

Функция СтрокаВДату(Знач ФорматДаты, Знач Дано, Ошибка = Ложь) Экспорт
    Попытка
        ё = Формат('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'
    КонецПопытки
КонецФункции
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.