Из секунд в дни, минуты, часы

1. Manticor 66 25.03.19 11:34 Сейчас в теме
Доброго времени суток. Есть значение разности дат в виде секунд, например 123600 сек.(разница между 25.03.2019 0:00:00 и 26.03.2019 10:20:00)

Помогите написать функцию, которая бы переводила эти секунды в количество дней, минут, часов и секунд.

Есть заготовка:

Функция ПредставлениеВремени(Знач Секунд) Экспорт
    
    Если НЕ ЗначениеЗаполнено(Секунд) Тогда
        Возврат "";
    КонецЕсли;
    
    Если ТипЗнч(Секунд) <> Тип("Число") Тогда
        Секунд = ?(ПустаяСтрока(Секунд), 0, Число(Секунд));
    КонецЕсли; 
    
    Часов  = Цел(Секунд / 3600);
    Минут  = Цел((Секунд % 3600) / 60);
    Секунд = Цел(Секунд % 60);
    
    Если Часов = 0 И Минут = 0 Тогда
        Возврат Строка(Секунд) + " с"; 
    ИначеЕсли Часов = 0 И Минут > 0 Тогда
        Возврат Строка(Минут) + " м " + Формат(Секунд, "ЧЦ=2; ЧН=00; ЧВН=") + " с"; 
    Иначе
        Возврат Строка(Часов) + " ч " + Формат(Минут, "ЧЦ=2; ЧН=00; ЧВН=") + " м " + Формат(Секунд, "ЧЦ=2; ЧН=00; ЧВН=") + " с";
    КонецЕсли;
    
КонецФункции
Показать


Как сюда добавить дни?
По теме из базы знаний
Найденные решения
6. alexx2510 38 25.03.19 12:20 Сейчас в теме
(1)
я бы так сделал:

Функция РазбитьСекунды(ВсегоСекунд)

Секунды = ВсегоСекунд % 60;
ВсегоМинут = (ВсегоСекунд - Секунды) / 60;
Минуты = ВсегоМинут % 60;
ВсегоЧасов = (ВсегоМинут - Минуты) / 60;
Часы = ВсегоЧасов % 24;
Дни = (ВсегоЧасов - Часы) / 24;

ПредставлениеДней = ?(ЗначениеЗаполнено(Дни), Строка(Дни) + " дн.", "");

Результат = СтрШаблон("%1 %2 ч. %3 мин. %4 сек.", ПредставлениеДней, Строка(Часы), Строка(Минуты), Строка(Секунды));

Возврат Результат;

КонецФункции
Показать
Nikola_N; ivangus; Lacoste4life; IVKuzmin; Manticor; nestokay; +6 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. alexx2510 38 25.03.19 12:20 Сейчас в теме
(1)
я бы так сделал:

Функция РазбитьСекунды(ВсегоСекунд)

Секунды = ВсегоСекунд % 60;
ВсегоМинут = (ВсегоСекунд - Секунды) / 60;
Минуты = ВсегоМинут % 60;
ВсегоЧасов = (ВсегоМинут - Минуты) / 60;
Часы = ВсегоЧасов % 24;
Дни = (ВсегоЧасов - Часы) / 24;

ПредставлениеДней = ?(ЗначениеЗаполнено(Дни), Строка(Дни) + " дн.", "");

Результат = СтрШаблон("%1 %2 ч. %3 мин. %4 сек.", ПредставлениеДней, Строка(Часы), Строка(Минуты), Строка(Секунды));

Возврат Результат;

КонецФункции
Показать
Nikola_N; ivangus; Lacoste4life; IVKuzmin; Manticor; nestokay; +6 Ответить
7. Manticor 66 25.03.19 12:46 Сейчас в теме
(6) Спасибо) это гениально)
2. caponid 25.03.19 11:46 Сейчас в теме
(1)
Как сюда добавить дни?

Дней = Секунд%86400
И возврат лучше не через если записать, а строкой Возврат ?(Дней=0, "", ""+Дней + " д. ") + ?(Часов=0, "", ""+Часов + " ч. ") и так далее
3. SlavaKron 25.03.19 11:55 Сейчас в теме
(2) Это же выдаст остаток от деления.
Надо: Цел(Секунд / 86400)
4. caponid 25.03.19 12:03 Сейчас в теме
(3) точно, ошибся)))) там деление нужно.
5. ZergKRSK 129 25.03.19 12:06 Сейчас в теме
(4) просто поделить секунды на 86400 полдела, надо же дальше учесть дни и высчитать часы минуты секунды
8. zarankony 305 26.03.19 12:47 Сейчас в теме
Меньше букв, больше функционала

Функция РазбитьСекунды(ВсегоСекунд)

Дата = дата(1,1,1) +ВсегоСекунд; 
Возврат СтрШаблон("%1 %2 ч. %3 мин. %4 сек.",?(ДеньГода(Дата)>1,Строка(ДеньГода(Дата)-1) + " дн.",""),Час(Дата),Минута(Дата),Секунда(Дата)) );

КонецФункции
Jeka44; ad_hoc; nekit_rdx; Sher_Han; dvissarov5; EvgeTrofi; Chronic; igrned; Alexoniq; +9 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот