1С 8.3 Получить дату из строки
Данные > Примеры кода 1С > 1С 8.3 Строка, текст, буквы
Перейти в раздел примеры кода 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) 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"))));
КонецФункции
Знач ДобавлятьМиллиСекунды = Ложь, Знач ДатаБезВремени = Ложь) Экспорт
Если Дата = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если ТипЗнч(Дата) = Тип("Число") Тогда
Сек = Цел(Дата / 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
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник