| 
    
        
     
     | 
    
  | 
Как из строки получить дату | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        В принципе, от задачи зависит необходимая мощность решения.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |