|
Как из строки получить дату | ☑ | ||
---|---|---|---|---|
0
Гуслица
19.05.17
✎
17:41
|
А как из формата МесяцГод типа «Ноябрь 2016» сделать начало месяца с типом дата — 01.11.2016?
|
|||
1
eryomin
19.05.17
✎
17:44
|
а ты не из формата, само значение возьми :)
|
|||
2
Ц_У
19.05.17
✎
17:53
|
(0) в где? в типовых есть справочник периоды и можно так
Справочники.Периоды.НайтиПоНаименованию("Ноябрь 2016").ДатаНачала |
|||
3
Гуслица
19.05.17
✎
17:56
|
(2) спасибо - щас проверю
|
|||
4
kiruha
19.05.17
✎
17:58
|
проще разобрать
|
|||
5
kiruha
19.05.17
✎
17:59
|
15 строчек
но еще проще вопрос на мисте |
|||
6
Гуслица
19.05.17
✎
18:00
|
(2) - спасибо о "Великий гуру"
У кого настоящие идеи? |
|||
7
HEKPOH
19.05.17
✎
18:01
|
(2) прикольно потроллил)
|
|||
8
Гуслица
19.05.17
✎
18:03
|
(5) Разобрать все месяца?
типа Если Лев(Период, 3) = "Янв" Тогда Месяц = 1 Иначе Если... ? |
|||
9
Letum
19.05.17
✎
18:03
|
Вот функция, которая жрет очень много форматов (кроме дат с указанием GMT и прочих поясов):
&НаКлиентеНаСервереБезКонтекста Функция ДатаИзСтроки(Строка) Результат = Неопределено; #Область Определение_Месяцев Месяцы = Новый Соответствие; Месяцы.Вставить("ЯНВ", "01"); Месяцы.Вставить("ФЕВ", "02"); Месяцы.Вставить("МАР", "03"); Месяцы.Вставить("АПР", "04"); Месяцы.Вставить("МАЙ", "05"); Месяцы.Вставить("МАЯ", "05"); Месяцы.Вставить("ИЮН", "06"); Месяцы.Вставить("ИЮЛ", "07"); Месяцы.Вставить("АВГ", "08"); Месяцы.Вставить("СЕН", "09"); Месяцы.Вставить("ОКТ", "10"); Месяцы.Вставить("НОЯ", "11"); Месяцы.Вставить("ДЕК", "12"); Месяцы.Вставить("JAN", "01"); Месяцы.Вставить("FEB", "02"); Месяцы.Вставить("MAR", "03"); Месяцы.Вставить("APR", "04"); Месяцы.Вставить("MAY", "05"); Месяцы.Вставить("JUN", "06"); Месяцы.Вставить("JUL", "07"); Месяцы.Вставить("AUG", "08"); Месяцы.Вставить("SEP", "09"); Месяцы.Вставить("OCT", "10"); Месяцы.Вставить("NOV", "11"); Месяцы.Вставить("DEC", "12"); #КонецОбласти #Область Определение_Вариантов_порядка_частей_даты Варианты = Новый Массив; Варианты.Добавить("К"); Варианты.Добавить("Ф"); Варианты.Добавить("Г"); Варианты.Добавить("М"); Варианты.Добавить("Д"); Варианты.Добавить("ч"); Варианты.Добавить("м"); Варианты.Добавить("с"); Варианты.Добавить("ДМ"); Варианты.Добавить("МГ"); Варианты.Добавить("ГМ"); Варианты.Добавить("чм"); Варианты.Добавить("ДМГ"); Варианты.Добавить("ГМД"); Варианты.Добавить("чмс"); Варианты.Добавить("ДМчм"); Варианты.Добавить("чДМГ"); Варианты.Добавить("чГМД"); Варианты.Добавить("ГМДч"); Варианты.Добавить("ДМГч"); Варианты.Добавить("чмДМ"); Варианты.Добавить("чмМД"); Варианты.Добавить("ДМГчм"); Варианты.Добавить("ГМДчм"); Варианты.Добавить("чмДМГ"); Варианты.Добавить("чмГМД"); Варианты.Добавить("МДчмГ"); Варианты.Добавить("ДМГчмс"); Варианты.Добавить("ГМДчмс"); Варианты.Добавить("чмсДМГ"); Варианты.Добавить("чмсГМД"); Варианты.Добавить("МДчмсГ"); #КонецОбласти #Область Поиск_частей_строк_с_назначением_ролей ЧастиСтроки = Новый Массив; ТекущаяПодстрока = ""; ТекущийВидСимвола = ""; ПредыдущийВидСимвола = ""; Для Счетчик = 1 по СтрДлина(Строка) + 1 Цикл Символ = ?(Счетчик = СтрДлина(Строка) + 1, ".", ВРЕГ(Сред(Строка, Счетчик, 1))); Если Символ >= "0" И Символ <= "9" Тогда ВидСимвола = "Цифры"; ИначеЕсли Символ >= "А" И Символ <= "Я" Тогда ВидСимвола = "Буквы"; ИначеЕсли Символ = ":" Тогда ВидСимвола = ":"; Иначе ВидСимвола = "Разрыв"; КонецЕсли; Если ТекущийВидСимвола <> ВидСимвола Тогда ОписаниеЭлемента = Новый Структура("Подстрока, Роли", ТекущаяПодстрока , Новый Массив); Если ТекущийВидСимвола = "Цифры" Тогда ЧислоПодстроки = Число(ТекущаяПодстрока); Если СтрДлина(ТекущаяПодстрока) = 8 Тогда Если Число(Лев(ТекущаяПодстрока, 4)) > 1000 И Число(Сред(ТекущаяПодстрока, 5,2))< 13 И Число(Сред(ТекущаяПодстрока, 7,2))< 32 Тогда ОписаниеЭлемента.Роли.Добавить("Ф"); КонецЕсли; КонецЕсли; Если СтрДлина(ТекущаяПодстрока) = 14 Тогда Если Число(Лев(ТекущаяПодстрока, 4)) > 1000 И Число(Сред(ТекущаяПодстрока, 5,2))< 13 И Число(Сред(ТекущаяПодстрока, 7,2))< 32 И Число(Сред(ТекущаяПодстрока, 9,2))< 24 И Число(Сред(ТекущаяПодстрока, 11,2))< 61 И Число(Сред(ТекущаяПодстрока, 13,2))< 61 Тогда ОписаниеЭлемента.Роли.Добавить("К"); КонецЕсли; КонецЕсли; Если СтрДлина(ТекущаяПодстрока) = 4 Тогда ОписаниеЭлемента.Роли.Добавить("Г"); КонецЕсли; Если СтрДлина(ТекущаяПодстрока) <= 2 Тогда Если ВидСимвола <> ":" И ПредыдущийВидСимвола <> ":" Тогда Если ЧислоПодстроки <= 31 Тогда ОписаниеЭлемента.Роли.Добавить("Д"); КонецЕсли; Если ЧислоПодстроки <= 12 Тогда ОписаниеЭлемента.Роли.Добавить("М"); КонецЕсли; ОписаниеЭлемента.Роли.Добавить("Г"); КонецЕсли; Если ЧислоПодстроки < 24 И ПредыдущийВидСимвола <> ":" Тогда ОписаниеЭлемента.Роли.Добавить("ч"); КонецЕсли; Если ЧислоПодстроки < 60 Тогда ОписаниеЭлемента.Роли.Добавить("м"); КонецЕсли; Если ЧислоПодстроки < 60 И ВидСимвола <> ":" Тогда ОписаниеЭлемента.Роли.Добавить("с"); КонецЕсли; КонецЕсли; ЧастиСтроки.Добавить(ОписаниеЭлемента); ИначеЕсли ТекущийВидСимвола = "Буквы" Тогда Для Каждого КлючИЗначение Из Месяцы Цикл Если Найти(ВРЕГ(ТекущаяПодстрока), КлючИЗначение.Ключ) > 0 Тогда ОписаниеЭлемента.Подстрока = КлючИЗначение.Значение; ОписаниеЭлемента.Роли.Добавить("М"); ЧастиСтроки.Добавить(ОписаниеЭлемента); Прервать; КонецЕсли; КонецЦикла; Если ЧастиСтроки.Количество() > 0 Тогда ПредыдущееОписание = ЧастиСтроки[ЧастиСтроки.Количество()- 1]; Если ВРЕГ(ТекущаяПодстрока) = "Г" или ВРЕГ(ТекущаяПодстрока) = "ГОД" или ВРЕГ(ТекущаяПодстрока) = "ГОДА" Тогда ПредыдущееОписание.Роли.Очистить(); ПредыдущееОписание.Роли.Добавить("Г"); КонецЕсли; Если ВРЕГ(ТекущаяПодстрока) = "Ч" ИЛИ ВРЕГ(ТекущаяПодстрока) = "ЧАС" Тогда ПредыдущееОписание.Роли.Очистить(); ПредыдущееОписание.Роли.Добавить("ч"); КонецЕсли; Если ВРЕГ(ТекущаяПодстрока) = "М" ИЛИ ВРЕГ(ТекущаяПодстрока) = "МИН" Тогда ПредыдущееОписание.Роли.Очистить(); ПредыдущееОписание.Роли.Добавить("м"); КонецЕсли; Если ВРЕГ(ТекущаяПодстрока) = "С" ИЛИ ВРЕГ(ТекущаяПодстрока) = "СЕК" Тогда ПредыдущееОписание.Роли.Очистить(); ПредыдущееОписание.Роли.Добавить("ч"); КонецЕсли; КонецЕсли; КонецЕсли; ТекущаяПодстрока = ""; ПредыдущийВидСимвола = ТекущийВидСимвола; ТекущийВидСимвола = ВидСимвола; КонецЕсли; ТекущаяПодстрока = ТекущаяПодстрока + Символ; КонецЦикла; #КонецОбласти #Область Поиск_варианта Для Каждого Вариант ИЗ Варианты Цикл ВариантСоответствует = Истина; Если СтрДлина(Вариант) = ЧастиСтроки.Количество() Тогда Для Счетчик = 1 по СтрДлина(Вариант) Цикл Если ЧастиСтроки[Счетчик - 1].Роли.Найти(Сред(Вариант, Счетчик, 1)) = Неопределено Тогда ВариантСоответствует = Ложь; Прервать; КонецЕсли; КонецЦикла; Иначе ВариантСоответствует = Ложь; КонецЕсли; Если ВариантСоответствует Тогда Год = 0; Месяц = 1; День = 1; Час = 0; Минута = 0; Секунда = 0; Для Счетчик = 1 по СтрДлина(Вариант) Цикл Символ = Сред(Вариант, Счетчик, 1); Если Символ = "Г" Тогда Год = Число(ЧастиСтроки[Счетчик - 1].Подстрока); Если Год < 50 Тогда Год = Год + 2000; ИначеЕсли Год < 100 Тогда Год = Год + 1900; КонецЕсли; ИначеЕсли Символ = "М" Тогда Месяц = Число(ЧастиСтроки[Счетчик - 1].Подстрока); ИначеЕсли Символ = "Д" Тогда День = Число(ЧастиСтроки[Счетчик - 1].Подстрока); ИначеЕсли Символ = "ч" Тогда Час = Число(ЧастиСтроки[Счетчик - 1].Подстрока); ИначеЕсли Символ = "м" Тогда Минута = Число(ЧастиСтроки[Счетчик - 1].Подстрока); ИначеЕсли Символ = "с" Тогда Секунда = Число(ЧастиСтроки[Счетчик - 1].Подстрока); ИначеЕсли Символ = "Ф" Тогда Год = Число(Сред(ЧастиСтроки[Счетчик - 1].Подстрока, 1, 4)); Месяц = Число(Сред(ЧастиСтроки[Счетчик - 1].Подстрока, 5, 2)); День = Число(Сред(ЧастиСтроки[Счетчик - 1].Подстрока, 7, 2)); ИначеЕсли Символ = "К" Тогда Год = Число(Сред(ЧастиСтроки[Счетчик - 1].Подстрока, 1, 4)); Месяц = Число(Сред(ЧастиСтроки[Счетчик - 1].Подстрока, 5, 2)); День = Число(Сред(ЧастиСтроки[Счетчик - 1].Подстрока, 7, 2)); Час = Число(Сред(ЧастиСтроки[Счетчик - 1].Подстрока, 9, 2)); Минута = Число(Сред(ЧастиСтроки[Счетчик - 1].Подстрока, 11, 2)); Секунда = Число(Сред(ЧастиСтроки[Счетчик - 1].Подстрока, 13, 2)); КонецЕсли; КонецЦикла; Если Год = 0 Тогда Год = Год(ТекущаяДата()); КонецЕсли; Результат = Дата(Год, Месяц, День, Час, Минута, Секунда); Прервать; КонецЕсли; КонецЦикла; #КонецОбласти #Область ВызовИсключения // Если нужно разрешить возвращать неопределено, область можно удалить. Если Результат = Неопределено Тогда ВызватьИсключение "Не найден Формат даты"; КонецЕсли; #КонецОбласти Возврат Результат; КонецФункции |
|||
10
Гуслица
19.05.17
✎
18:04
|
(7) Ха ха по ходу внучка петросяна или дочька Галустяна
|
|||
11
X Leshiy
19.05.17
✎
18:05
|
(10) А нам смешно :)
|
|||
12
Гуслица
19.05.17
✎
18:05
|
(9) Уххх мощно
надеялся на что то попроще |
|||
13
Гуслица
19.05.17
✎
18:05
|
(11) Я этому рад
|
|||
14
X Leshiy
19.05.17
✎
18:07
|
(13) Ну отрежь год, а месяц тупо сравни.
Делов на 10 минут. |
|||
15
Letum
19.05.17
✎
18:08
|
(12) Что может быть проще - скопипастил и юзаешь.
|
|||
16
Неверный Параметр И
19.05.17
✎
18:12
|
(12) Пока Не ВвестиДату(Переменная, "Введите дату для " + ДатаСтрокой) Цикл КонецЦикла;
|
|||
17
Ц_У
19.05.17
✎
18:15
|
(7) слишком толсто получилось?
|
|||
18
Гуслица
19.05.17
✎
18:19
|
Всем спасибо!
Перебрал. и тебе Ц_У зы ' поменяй род занятий с программиста на юмориста |
|||
19
kiruha
19.05.17
✎
18:19
|
(9) Можно проще через обратное преобразование Формат
|
|||
20
Ц_У
19.05.17
✎
18:20
|
(18)
а тебе, Гуслица тогда посоветовать "вон из профессии!" ? |
|||
21
Гуслица
19.05.17
✎
18:21
|
(19) если знаешь такую функцию - поделись
|
|||
22
Гуслица
19.05.17
✎
18:22
|
(20) это с какого ТЫ МНЕ ТОГДА советуешь это?
|
|||
23
Неверный Параметр И
19.05.17
✎
18:23
|
(22) У вас в Коптево все такие тугие?
|
|||
24
kiruha
19.05.17
✎
18:23
|
(21)
Делаешь формат для разных вариантов, результат в соответствие |
|||
25
Гуслица
19.05.17
✎
18:25
|
(23) Не знаю как у вас в Коптево, но у нас все замечтательно
|
|||
26
Ц_У
19.05.17
✎
18:25
|
(22) я еще советую на прием к психиатору сходить и сдать анализы на бешенство
|
|||
27
Гуслица
19.05.17
✎
18:26
|
(26) Это потому что ты меня укусил?)
собака) |
|||
28
Ц_У
19.05.17
✎
18:27
|
(27) как пройдет пубертатный период сможем общаться, а сейчас - вон из профессии!
|
|||
29
kiruha
19.05.17
✎
18:29
|
Для НомерМесяца=1 По 12 Цикл
Для Каждого ВидФормата из ВидыФорматов МесяцыСтрокой.Вставить(НомерМесяца,Формат(ДатаИзМесяца(НомерМесяца),ВидФормата)); КонецЦикла КонецЦикла; |
|||
30
kiruha
19.05.17
✎
18:30
|
короче и универсальнее
|
|||
31
kiruha
19.05.17
✎
18:31
|
только ошибка :
Для НомерМесяца=1 По 12 Цикл Для Каждого ВидФормата из ВидыФорматов МесяцыСтрокой.Вставить(Формат(ДатаИзМесяца(НомерМесяца),ВидФормата),НомерМесяца); КонецЦикла КонецЦикла; |
|||
32
Гуслица
19.05.17
✎
18:33
|
(28) долго искал это слово? ""пубертатный период""
))) |
|||
33
Гуслица
19.05.17
✎
18:35
|
(31) Спасибо,
но я уже сделал так: Функция РазложитьДату(Период) Мес = ""; Год = ""; М=0; Мес = НРег(Лев(Период)); Год = Прав(Период); Если Мес = "янв" Тогда М = 1; ИначеЕсли Мес = "фев" Тогда М = 2; ИначеЕсли Мес = "мар" Тогда М = 3; ИначеЕсли Мес = "апр" Тогда М = 4; ИначеЕсли Мес = "май" Тогда М = 5; ИначеЕсли Мес = "июн" Тогда М = 6; ИначеЕсли Мес = "июл" Тогда М = 7; ИначеЕсли Мес = "авг" Тогда М = 8; ИначеЕсли Мес = "сен" Тогда М = 9; ИначеЕсли Мес = "окт" Тогда М = 10; ИначеЕсли Мес = "ноя" Тогда М = 11; ИначеЕсли Мес = "дек" Тогда М = 12; КонецЕсли; Возврат Дата(Год,М,1); КонецФункции |
|||
34
Ц_У
19.05.17
✎
18:36
|
(32) к счастью, мое образование позволяет использовать больший словарный запас, чем "собака", а вот ты видимо искал определение, прежде чем ответить. За сим разрешите откланяться.
|
|||
35
eryomin
19.05.17
✎
18:36
|
Функция ВернутьДату(МесяцГод)
мДата = НачалоГода(ТекущаяДата()); мСписок = Новый Структура; Для ш = 1 По 12 Цикл мСписок.Вставить(Формат(Текдата,"ДФ=ММММ"), ш); Текдата = ДобавитьМесяц(Текдата, 1); КонецЦикла; Стр = СокрЛП(МесяцГод); Стр = СтрЗаменить(Стр, " ",Символы.ПС); Месяц = мСписок[СтрПолучитьСтроку(Стр,1)]; Год = Число(СтрПолучитьСтроку(СтрЧислоСтрок(Стр))); Возврат Дата(Год,Месяц,1); КонецФункции // ВернутьДату() |
|||
36
Гуслица
19.05.17
✎
18:36
|
(34) Собака - друг человека.
Так что я тебе комплимент сделал) |
|||
37
kiruha
19.05.17
✎
18:38
|
(35)
+1 только можно еще много других форматов добавлять |
|||
38
Гуслица
19.05.17
✎
18:40
|
(35)
Спасибо, грамотно |
|||
39
eryomin
19.05.17
✎
18:40
|
ТекДата = мДата
|
|||
40
Гуслица
19.05.17
✎
18:41
|
(39) - понял
|
|||
41
Letum
19.05.17
✎
18:42
|
(19) "21 ноября 2017г.", "июнь.17", "2017.06.12" и т.д. задолбаешься все возможные варианты прописывать.
|
|||
42
Letum
19.05.17
✎
18:46
|
В принципе, от задачи зависит необходимая мощность решения.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |