|
преобразование даты | ☑ | ||
---|---|---|---|---|
0
Маленький Вопросик
19.06.15
✎
11:33
|
Народ, подскажите краткую функцию по преобразованию даты 19.06.15 (строка) в 19.06.2015 (дата), по-умолчанию, преобразует в 19.06.0015??
|
|||
1
Jokero
19.06.15
✎
11:43
|
добавь потом к дате 2000 лет )))
|
|||
2
vicof
19.06.15
✎
11:43
|
Сдвиг дат в СКЛ надо использовать
|
|||
3
Маленький Вопросик
19.06.15
✎
11:45
|
(1) шутка? я тоже об этом думаю
|
|||
4
Aprobator
19.06.15
✎
11:47
|
не храните дату в строке и будет вам счастье. Строку из даты можно всегда получить. Обратно, чуток посложнее.
|
|||
5
Aceforg
19.06.15
✎
11:51
|
(3) Не забудь учесть года прошлого столетия. А то получится 2080 года рождения.
|
|||
6
Nykos
19.06.15
✎
11:55
|
ПолучаемаяДата = Дата(Прав((Лев(СтрокаДата,10)),4) + Сред((Лев(СтрокаДата,10)),4,2) + Лев((Лев(СтрокаДата,10)),2));
xD |
|||
7
Aceforg
19.06.15
✎
12:02
|
(6) Попробуй 32.13.15 или 1.1.15
|
|||
8
vitaliklibra
19.06.15
✎
12:15
|
(0) Попробуйте так:
ПолучаемаяДата = ДобавитьМесяц(Дата(СтрокаДата), 12*2000) |
|||
9
vhl
19.06.15
✎
12:20
|
(0) >по-умолчанию, преобразует в 19.06.0015
по какому умолчанию? кто преобразует? какая комманда? (4) обратно тоже легко. |
|||
10
vhl
19.06.15
✎
12:25
|
Функция ДатаИзСтроки(Источник)
//DD.MM.YY hh:mm:ss //DD.MM.YYYY hh:mm:ss Если ТипЗнч(Источник) = Тип("Дата") Тогда Возврат Источник; КонецЕсли; Буфер = Источник; ПозицияТочки = Найти(Буфер, "."); Если ПозицияТочки = 0 Тогда Возврат "Неверный формат строки с датой"; КонецЕсли; ЧислоДаты = Лев(Буфер, ПозицияТочки - 1); Буфер = Сред(Буфер, ПозицияТочки + 1); ПозицияТочки = Найти(Буфер, "."); Если ПозицияТочки = 0 Тогда Возврат "Неверный формат строки с датой"; КонецЕсли; МесяцДаты = Лев(Буфер, ПозицияТочки - 1); Буфер = Сред(Буфер, ПозицияТочки + 1); ПозицияТочки = Найти(Буфер, " "); Если ПозицияТочки = 0 Тогда ГодДаты = Буфер; ЧасДаты = 0; МинДаты = 0; СекДаты = 0; Иначе ГодДаты = Лев(Буфер, ПозицияТочки - 1); Буфер = Сред(Буфер, ПозицияТочки + 1); ПозицияТочки = Найти(Буфер, ":"); ЧасДаты = Лев(Буфер, ПозицияТочки - 1); Буфер = Сред(Буфер, ПозицияТочки + 1); ПозицияТочки = Найти(Буфер, ":"); МинДаты = Лев(Буфер, ПозицияТочки - 1); Буфер = Сред(Буфер, ПозицияТочки + 1); СекДаты = Сред(Буфер,1); КонецЕсли; Попытка Приемник = Дата(?(СтрДлина(ГодДаты) > 2, ГодДаты, Число(?(Число(Лев(ГодДаты, 1)) < 2, "20", "19") + ГодДаты)), Число(МесяцДаты), Число(ЧислоДаты),Число(ЧасДаты),Число(МинДаты),число(СекДаты)); Исключение Возврат "Не удалось преобразовать строку в дату"; КонецПопытки; Возврат Приемник; КонецФункции |
|||
11
Рэйв
19.06.15
✎
12:27
|
Функция ДатаИзСтрокиВн(СтрокаДата) Экспорт
СтрокаДатаДо =СтрокаДата; СтрокаДата =ПроверитьТолькоЦифрыВн(СтрокаДата); Если СтрДлина(СтрокаДата)=6 Тогда ДатаИмпорт=СокрЛП(СтрокаДата); Год=Прав(ДатаИмпорт,2); Если Число(Лев(Год,1))>5 Тогда Год="19"+Год; Иначе Год="20"+Год; КонецЕсли; Месяц =Сред(ДатаИмпорт,3,2); День =Лев(ДатаИмпорт,2); Попытка Дата80=Дата(Год+Месяц+День); Исключение Сообщить("Ошибка конвертации даты: '"+ДатаИмпорт+"' -> '"+Год+"."+Месяц+"."+"'"); Возврат Дата(0); Конецпопытки; Возврат Дата80; ИначеЕсли СтрДлина(СтрокаДата)=8 Тогда ДатаИмпорт=СокрЛП(СтрокаДата); Год=Прав(ДатаИмпорт,4); Месяц =Сред(ДатаИмпорт,3,2); День =Лев(ДатаИмпорт,2); Попытка Дата80=Дата(Год+Месяц+День); Исключение Сообщить("Ошибка конвертации даты: '"+ДатаИмпорт+"' -> '"+Год+"."+Месяц+"."+"'"); Возврат Дата(0); Конецпопытки; Возврат Дата80; Иначе Сообщить("Неверный формат переданной строки. Полученый параметр: '"+СтрокаДатаДо+"'. Обработанный параметр: "+СтрокаДата); Возврат Дата(0); КонецЕсли; КонецФункции |
|||
12
pin4er
19.06.15
✎
12:27
|
хм... а так не проще?
вот сделай вешнюю обработку и проверяй 1 реквизит "СтрДата" - строка 2 реквизит "НоваяДата" - Дата (ну или датаИвремя) форма по умолчанию, на выполнить повесь Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка) ПолучитьДатуИзСтроки(СтрДата); КонецПроцедуры Функция ПолучитьДатуИзСтроки(СтрДата) НоваяДата = Дата("00010101");//или Дата("00010101000000") Если ПустаяСтрока(СтрДата) Тогда Возврат НоваяДата; КонецЕсли; Если Найти(СтрДата,".") > 0 Тогда Если Найти(СтрДата,":") > 0 И Найти(СтрДата," ") > 0 Тогда М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрДата," "); Возврат ПолучитьДатуИзСтроки(М[0]); КонецЕсли; М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрДата,"."); ИначеЕсли Найти(СтрДата,"/")>0 Тогда М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрДата,"/"); ИначеЕсли Найти(СтрДата,",")>0 Тогда М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрДата,","); ИначеЕсли Найти(СтрДата,"-")>0 Тогда М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрДата,"-"); КонецЕсли; Попытка Если М.Количество() = 3 Тогда Год = ?(СтрДлина(М[2]) = 2,2000 + М[2],М[2]); НоваяДата = Дата(Год,М[1],М[0]); ИначеЕсли М.Количество() = 2 Тогда Год = ?(СтрДлина(М[1]) = 2,2000 + М[1],М[1]); НоваяДата = Дата(Год,М[0],1); КонецЕсли; Исключение КонецПопытки; КонецФункции |
|||
13
Рэйв
19.06.15
✎
12:27
|
+
Функция ПроверитьТолькоЦифрыВн(Пар,Режим="Очистка") Экспорт Ответ=""; Для Н=1 По СтрДлина(Пар) Цикл Сим=Сред(Пар,н,1); Если НЕ(Найти("0123456789", Сим)) Тогда Если Режим="Проверка" Тогда Возврат Ложь; Иначе Продолжить; КонецЕсли; Иначе Ответ=Ответ+Сим; КонецЕсли; КонецЦикла; Если Режим="Проверка" Тогда Возврат Истина; Иначе Возврат Ответ; КонецЕсли; КонецФункции |
|||
14
Маленький Вопросик
19.06.15
✎
12:32
|
вот код! что вы нагородили тут!
дата 19.06.15 ДатаДокМассив = СтрЗаменить(ДатаДок, ".", Символы.ПС); ДеньДок = СтрПолучитьСтроку(ДатаДокМассив,1); МесДок = СтрПолучитьСтроку(ДатаДокМассив,2); ГодДок = Число(СтрПолучитьСтроку(ДатаДокМассив,3)); Если ГодДок<2000 Тогда ГодДок = "20"+СтрПолучитьСтроку(ДатаДокМассив,3); КонецЕсли; ДатаДок1 = ДеньДок+"."+МесДок+"."+ГодДок+ " 0:00:00"; ДатаДок = ДатаДок1; |
|||
15
pin4er
19.06.15
✎
12:33
|
(14) возми поставь в мой кусок
он тебе вернет 19.06.2015 |
|||
16
pin4er
19.06.15
✎
12:35
|
(15) можешь и вместо . поставить /,-
и тоже ок будет |
|||
17
pin4er
19.06.15
✎
12:36
|
(14) откуда ты знаешь что юзер вместо "." не поставит "," ?
|
|||
18
pin4er
19.06.15
✎
12:38
|
ОбщийМодуль, общегоНазначения
// Функция "расщепляет" строку на подстроки, используя заданный // разделитель. Разделитель может иметь любую длину. // Если в качестве разделителя задан пробел, рядом стоящие пробелы // считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр // игнорируются. // Например, // РазложитьСтрокуВМассивПодстрок(",строка 1,,,строка 2", ",") возвратит массив значений из пяти элементов, // три из которых - пустые строки, а // РазложитьСтрокуВМассивПодстрок(" строка1 строка 2", " ") возвратит массив значений из двух элементов // // Параметры: // Стр - строка, которую необходимо разложить на подстроки. // Параметр передается по значению. // Разделитель - строка-разделитель, по умолчанию - запятая. // // // Возвращаемое значение: // массив значений, элементы которого - подстроки // Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока Истина Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции |
|||
19
beaver1971
19.06.15
✎
12:39
|
Добавлю свои пять копеек ))))
СтраннаяДата = "19.06.15"; Reg = Новый COMОбъект("VBScript.RegExp"); Reg.Pattern = "(\d+).(\d+).(\d+)"; ПравильнаяДата = Дата(Reg.Replace(СтраннаяДата, "20$3$2$1")); Сообщить(ПравильнаяДата); |
|||
20
pin4er
19.06.15
✎
12:40
|
(19) палец вверх))
|
|||
21
Nykos
19.06.15
✎
13:10
|
(7) да ладно)
|
|||
22
Aprobator
19.06.15
✎
17:56
|
Странно, что XML преобразования никто не привёл ещё )))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |