Время суток по категориям

Автор JohnSUN, 3 июня 2011, 16:39

0 Пользователи и 1 гость просматривают эту тему.

JohnSUN

Доброго здоровья, коллеги!
Что-то давно в этом разделе не появлялось забавных вопросов.
Помните, p1ter как-то поднимал тему про Расчет времени работы?

Тогда как-то не обратил внимание на этот нюанс - «для вычесления ночных смен фал не подходит», а тут вдруг озадачился.
Ну, действительно, а как в Calc'е быстро и просто работать со временем суток?
Вот такая задача: есть диапазон времени, заданный датой-временем начала и окончания.

Сотрудник Приход Уход
Петров Семен Семенович 06.01.11 01:00 07.01.11 11:55
Семенов Степан Семенович 06.01.11 05:30 06.01.11 12:29
Степанов Степан Семенович 06.01.11 09:50 06.01.11 10:15
Александров Степан Степанович 06.01.11 08:15 09.01.11 16:30
Александров Степан Иванович 06.01.11 13:05 06.01.11 23:10
(То что  Степан Степанович безвылазно просидел у себя в кабинете больше двух суток никого не должно удивлять — он главбух, он готовил годовой отчет... Это мы знаем, что вывести на печать все нужные цифры — дело двадцати минут, а остальное время он дремал и пасьянсы раскладывал... Но мы-то его руководству не сдадим? Отбыл человек на рабочем месте кучу времени — давайте сосчитаем, сколько ему за это должны)

Есть таблица, которая разделяет сутки на какие-то временные отрезки.
Время Название Коэффициент
06:59:59 Ночь 2
08:59:59 Утро 1,1
17:59:59 День 1
21:59:59 Вечер 1,2
23:50:00 Ночь 2
(Обратите внимание на эту подлянку: десять минут до полуночи не описаны и из общего потока времени выпадают напрочь. Ну, в реальной жизни и не такие данные в справочниках находишь)
Требуется для каждого имеющегося временного интервала подсчитать количество утреннего, дневного, вечернего и ночного времени.

Во-первых, задача абстрактная. Такой подсчет может понадобиться и для расчета зарплаты космонавта на орбите, и объёма воды для полива растений в разное время суток, и количества патрулей на улицах города...
Во-вторых, задача почти «мертворожденная». Все мы прекрасно понимаем, что для таких расчетов лучше использовать не Calc. Но ведь бывают же случаи?...
В третьих, а что делать? Лето началось, активность в связи с отпусками падает, пищи для мозгов не хватает. А так хоть какое-то развлечение.

Решать можно как угодно, лишь бы работало и работало быстро: формулы из стандартных функций, макросы, существующие расширения - в ход идёт всё. Ну и выберем коллегиально наиболее оптимальное решение...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

smaharbA

еще добавлю - как посчитать длительность если большее может быть меньше меньшего
как то остановился на этом
[ $start -lt $end -a $start -lt $ctime -a $ctime -lt $end ] || \
[ $start -gt $end ] && [ $start -lt $ctime -o $ctime -lt $end ];

но может есть красивее (язык и среда не важна)
Я конечно далек от мысли... (с)

JohnSUN

Точно! Про контрамоцию я забыл... У-Янус пришел в институт первого января около четырех утра, задержался в лаборатории и ушел праздновать Новый год домой в девять вечера, за три часа до полуночи. Итого отработал двое суток минус разница между большим 21:00 31/12 и меньшим 04:00 01/01, то есть 24-7=17 часов.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне