|
v7: Секунды перевести в Дату, как? | ☑ | ||
---|---|---|---|---|
0
Orfin
18.01.19
✎
12:20
|
Изначально цель сделать операции с датами как в 8ке. Т.е к Дата Время прибавить/отнять секунды и получить новые Дата время. Например, 01.01.2019 23:50:00 + 3600 секунд = 02.01.2019 00:50:00
Так я перевожу из Даты в Секунду, наверное правильно. Функция ПеревестиДатуВСекунды(Знач Дата1) ВсегоДней1 = Дата1 - Дата(1,1,1); ВСекундах1 = ВсегоДней1 * 86400; Возврат ВСекундах1; КонецФункции // ПеревестиВремяВСекунды Теперь нужно обратно, как это правильно сделать? Нашел в интернете функцию по переводу секунд в время, она работает, хотел по подобию сделать, что бы секунды перевести в Дату Функция ПеревестиИзСекундВВремя(Знач sec) часов = Цел(sec/(3600)); минут = Цел((sec-часов*3600 )/60); сек = sec-часов*3600-минут*60; рез = Строка(Формат(часов,"Ч(0)2"))+":"+Строка(Формат(минут,"Ч(0)2"))+":"+Строка(Формат(сек,"Ч(0)2")); Возврат рез; КонецФункции // ПеревестиИзСекундВВремя по подобию вышло что то типа такого ... Годов = Цел(sec/(СекундВГоде)); Месяцев = Цел((sec-Годов*СекундВГоде)/СекундВМесяце); Дней = Цел((sec-Годов*СекундВГоде - Месяцев*СекундВМесяце)/86400); но тут проблема в том, что не известно сколько секунд в Годе или месяце, бывает ведь 28, 30, 31 день в месяце. |
|||
1
SleepyHead
гуру
18.01.19
✎
12:21
|
(0) А в каком месяце сколько дней, ты тоже не знаешь? И не умеешь определять месяц по дате?
|
|||
2
Масянька
18.01.19
✎
12:23
|
(0) А обязательно секунды?
|
|||
3
Orfin
18.01.19
✎
12:26
|
(1) Не знаю, на входе функции только секунды
(2) Есть еще варианты? просто операции с датой время удобно совершать в секундах. т.е Дату время переводим в секунды, совершаем операции, потом обратно. |
|||
4
Orfin
18.01.19
✎
12:29
|
Рассмотрю любые варианты, главное что бы в 7.7 можно было делать так, как писал выше, например
01.01.2019 23:50:00 + 3600 секунд = 02.01.2019 00:50:00 |
|||
5
AlS
18.01.19
✎
12:32
|
А если как-то так
ДеньГода = Цел((sec-Годов*СекундВГоде)/СекундВДне); а дальше уже с этим поиграться ? |
|||
6
Масянька
18.01.19
✎
12:34
|
(4) Из общего журнала в ТиС:
//////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ // //****************************************************************************** // ПолучитьВремяДокументаЧислом(Док) // // Параметры: // Док - документ, чьё время надо получить // // Возвращаемое значение: // Нет // // Описание: // Преобразует время документа в число. // Функция ПолучитьВремяДокументаЧислом(Док) Перем Ч,М,С; Док.ПолучитьВремя(Ч,М,С); Возврат 3600*Ч+60*М+С; КонецФункции // ПолучитьВремяДокументаЧислом() //****************************************************************************** // УстановитьВремяДокументаЧислом(Док, Сек) // // Параметры: // Док - документ, чьё время надо установить // Сек - число, новое время документа в секундах (с начала дня) // // Возвращаемое значение: // Нет // // Описание: // Устанавливает новое время документа. // Процедура УстановитьВремяДокументаЧислом(Док, Сек) Перем Ч,М,С; Ч=Цел(Сек/3600); Сек=Сек-Ч*3600; М=Цел(Сек/60); С=Сек-М*60; Док.УстановитьВремя(Ч,М,С); КонецПроцедуры // УстановитьВремяДокументаЧислом() Получаешь свое время числом. Прибавляешь свои секунды (числом). Из числа получаешь время. Кушаешь печеньки (Ёпрст) |
|||
7
Pahomich
18.01.19
✎
12:34
|
В чем проблема? Напиши нужную библиотек функций даты и времени, помести в глобальный модуль.
|
|||
8
uno-group
18.01.19
✎
12:38
|
Зачем с месяцем заморачиваться есть же НомерДняГода
|
|||
9
Orfin
18.01.19
✎
12:40
|
(6) операции со временем у меня уже получаются.
т.е я перевожу время в секунды и обратно, всё ок. проблема с датой. Функция ПеревестиВремяВСекунды(Знач Время) Спис = глРазложить(Время, ":"); Часы1 = Число(Спис.ПолучитьЗначение(1)); Минуты1 = Число(Спис.ПолучитьЗначение(2)); Секунды1 = Число(Спис.ПолучитьЗначение(3)); ВСекундах1 = Часы1 * 3600 + Минуты1 * 60 + Секунды1; Возврат ВСекундах1; КонецФункции // ПеревестиВремяВСекунды с секундами совершаем опрецаии. и обратно Функция ПеревестиИзСекундВВремя(Знач sec) // hours = sec / 3600 % 24; // minutes = sec / 60 % 60; // seconds = sec % 60; // // Возврат Строка(hours) +":"+ Строка(minutes) +":"+ Строка(seconds); часов = Цел(sec/(3600)); минут = Цел((sec-часов*3600 )/60); сек = sec-часов*3600-минут*60; рез = Строка(Формат(часов,"Ч(0)2"))+":"+Строка(Формат(минут,"Ч(0)2"))+":"+Строка(Формат(сек,"Ч(0)2")); Возврат рез; КонецФункции |
|||
10
SleepyHead
гуру
18.01.19
✎
12:43
|
У тебя есть дата и количество секунд, которые надо к ней прибавить.
Посчитай, сколько у тебя полных дней: подели количество секунд на 86 400 и возьми целую часть. Теперь прибавь к исходной дате это количество дней, в 1с77 это простая операция: мДата + N Потом прибавь остаток секунд. Это уже посложнее, но я все-таки крупный стратег, а не мелкий тактик, дальше сам. |
|||
11
uno-group
18.01.19
✎
12:43
|
Дата1+ Цел(Добавитьсекунд/86400);
Получишь новую дату, а дальше работаешь с остатком. Если сумма секунд старого документа + остаток от добавить секунд от больше 86400 то добавляешь ее день. |
|||
12
uno-group
18.01.19
✎
12:44
|
а от часов отнимаешь 24
|
|||
13
SleepyHead
гуру
18.01.19
✎
12:45
|
(11) я первый написал! ))
|
|||
14
Василий Алибабаевич
18.01.19
✎
12:46
|
(0) "28, 30, 31"
В смысле - "невисокостный год", "високостный год" и "хренпойминаскольковисокостный"? |
|||
15
Масянька
18.01.19
✎
12:48
|
||||
16
uno-group
18.01.19
✎
12:50
|
(13) главное ему же это 99% что нафик не нужно. Неправильная постановка задачи и перевод ее в алгоритм.
|
|||
17
SleepyHead
гуру
18.01.19
✎
12:57
|
(16) Но чисто математически задача интересная. А так согласен, человек мается ерундой.
|
|||
18
vova1122
18.01.19
✎
13:11
|
(0) Озвучь задачу. Может это вообще не то.
У меня была задача похожая. На входе я имел дату документа в UNIX-системе (число секунд которые прошли от 01.01.1970 года по Гринвичу). Из этой даты нужно было установить дату и время документа в 1С7. Если у вас задача похожая, могу поделиться кодом. |
|||
19
Orfin
18.01.19
✎
13:30
|
Спасибо всем! Вроде работает
Функция ПеревестиИзСекундВДату(Знач sec) Дней = sec / 86400; рез = Дата(1,1,1) + Дней; Возврат рез; КонецФункции // ПеревестиИзСекундВВремя Дальше буду писать в целом к дате время прибавить секунды. Пока что у меня функции по отдельности для дат и секунд. (18) Задача такая, что Есть данные прихода, ухода сотрудников в виде 25.09.18 типа дата, и отдельно время 16:51:47 тип строка. Нужно считать сколько работал человек и сравнивать с графиком работы, и производить всяческие операции, прибавить к ДатаВремя секунды, отнять, разница, и т.д |
|||
20
vova1122
18.01.19
✎
13:44
|
(19) если переводишь дату в секунды не забывай перевести и время в секунды и сложить их. (для Дата1 и для Дата2). Тогда просто будет посчитать время сколько сотрудник стоял у станка.
И когда к дате добавляешь число то отбрасывай дробную часть от Дней. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |