1С 8.3 Получить дату из строки - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Получить дату из строки

Данные > Примеры кода 1С > 1С 8.3 Строка, текст, буквы
Функция преобразует различные варианты строк в дату. Преобразовывает "строки" следующих видов "25/05/21","25-05-2021","25,21","05.21","25.05.2021 0:00:00" к типу "дата".
Получить дату из строки в 1С 8.3:
Функция Получить_дату_из_строки(Стр)

   // Функция РазложитьСтрокуВМассивПодстрок:
   // 1) https://koder.by/razlozhitstrokuvmassivpodstrok.php
   // 2) БСП: https://koder.by/bsp_razlozhitstrokuvmassivpodstrok.php

   Полученная_дата = Дата("00010101000000");

   Если ПустаяСтрока(Стр) Тогда
       Возврат Полученная_дата;
   КонецЕсли;

   Если Найти(Стр,".") > 0 Тогда
       Если Найти(Стр,":") > 0 И Найти(Стр," ") > 0 Тогда
           МассивСтр = РазложитьСтрокуВМассивПодстрок(Стр," "); //ОбщегоНазначения
           Возврат Получить_дату_из_строки(МассивСтр[0]);
       КонецЕсли;
       МассивСтр = РазложитьСтрокуВМассивПодстрок(Стр,"."); //ОбщегоНазначения
   ИначеЕсли Найти(Стр,"/")>0 Тогда
       МассивСтр = РазложитьСтрокуВМассивПодстрок(Стр,"/"); //ОбщегоНазначения
   ИначеЕсли Найти(Стр,",")>0 Тогда
       МассивСтр = РазложитьСтрокуВМассивПодстрок(Стр,","); //ОбщегоНазначения
   ИначеЕсли Найти(Стр,"-")>0 Тогда
       МассивСтр = РазложитьСтрокуВМассивПодстрок(Стр,"-"); //ОбщегоНазначения
   КонецЕсли;

   Попытка
       Если МассивСтр.Количество() = 3 Тогда //"01.02.21" или "01.02.2021"
           Год = ?(СтрДлина(МассивСтр[2]) = 2,2000 + МассивСтр[2],МассивСтр[2]);
           Полученная_дата = Дата(Год,МассивСтр[1],МассивСтр[0]);
       ИначеЕсли МассивСтр.Количество() = 2 Тогда //"02.21" или "02.2021";
           Год = ?(СтрДлина(МассивСтр[1]) = 2,2000 + МассивСтр[1],МассивСтр[1]);
           Полученная_дата = Дата(Год,МассивСтр[0],1);
       КонецЕсли;
   Исключение
   КонецПопытки;

   Возврат Полученная_дата;

КонецФункции
Получить дату из строки (от подписчика) в 1С 8.3:
Функция ПреобразоватьДатуКСтроке(Знач Дата, Знач ПреобразоватьКУниверсальномуВремени = Ложь,
   Знач ДобавлятьМиллиСекунды = Ложь, Знач ДатаБезВремени = Ложь) Экспорт

   Если Дата = Неопределено Тогда
       Возврат Неопределено;
   КонецЕсли;

   Если ТипЗнч(Дата) = Тип("Число") Тогда
       Сек = Цел(Дата / 1000);
       МиллиСек = Дата % 1000;
       Дата = Дата(1, 1, 1) + Сек;
       СмещениеЧас = 0;
       СмещениеМинуты = 0;
       ПреобразоватьКУниверсальномуВремени = Ложь;
       Знак = "+";
   Иначе
       МиллиСек = 0;
       ТекущееСмещениеСек = СмещениеСтандартногоВремени();
       Знак = ?(ТекущееСмещениеСек < 0, "-", "+");
       ТекущееСмещениеСек = ?(ТекущееСмещениеСек < 0, -1*ТекущееСмещениеСек, ТекущееСмещениеСек);
       СмещениеЧас = Цел(ТекущееСмещениеСек / 3600);
       СмещениеМинуты = Цел((ТекущееСмещениеСек - СмещениеЧас * 3600) / 60);
       //СмещениеМинуты = ?(СмещениеМинуты < 0, -1 * СмещениеМинуты, СмещениеМинуты);
   КонецЕсли;

   Если ПреобразоватьКУниверсальномуВремени Тогда
       ТекущийЧП = СтрШаблон("GMT%1%2:%3", Знак,
       Формат(СмещениеЧас, "ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0"),
       Формат(СмещениеМинуты, "ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0"));
       Дата = УниверсальноеВремя(Дата, ТекущийЧП);
       СмещениеЧас = 0;
       СмещениеМинуты = 0;
       Знак = "+";
   КонецЕсли;

   Возврат ?(ДатаБезВремени = Истина, Формат(Дата, "ДФ=гггг-ММ-дд; ДП=0001-01-01"),
   Формат(Дата, "ДФ=гггг-ММ-ддTЧЧ:мм:сс; ДП=0001-01-01T00:00:00")
   + ?(ДобавлятьМиллиСекунды, "." + Формат(МиллиСек, "ЧЦ=3; ЧДЦ=0; ЧН=000; ЧВН=; ЧГ=0"), "")
   + ?(СмещениеЧас = 0 И СмещениеМинуты = 0, "Z",
   СтрШаблон("%1%2:%3", Знак,//?(СмещениеЧас >= 0, "+", ""),
   Формат(СмещениеЧас, "ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0"),
   Формат(СмещениеМинуты, "ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН=; ЧГ=0"))));

КонецФункции
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 25.05.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому