Секунды в дни-часы-минуты (PHP)

В PHP нет функции способной посчитать количество лет/дней/часов/минут в секундах. Написать функцию, которая будет вычислять данные из секунд достаточно просто.

Функция seconds2times

Напишем функцию array seconds2times(int $seconds), которая принимает количество секунд и возвращает массив с годами/днями/часами/минутами/секундами.

<?php /** * Преобразование секунд в секунды/минуты/часы/дни/года * * @param int $seconds - секунды для преобразования * * @return array $times: * $times[0] - секунды * $times[1] - минуты * $times[2] - часы * $times[3] - дни * $times[4] - года * */ function seconds2times($seconds) { $times = array(); // считать нули в значениях $count_zero = false; // количество секунд в году не учитывает високосный год // поэтому функция считает что в году 365 дней // секунд в минуте|часе|сутках|году $periods = array(60, 3600, 86400, 31536000); for ($i = 3; $i >= 0; $i--) { $period = floor($seconds/$periods[$i]); if (($period > 0) || ($period == 0 && $count_zero)) { $times[$i+1] = $period; $seconds -= $period * $periods[$i]; $count_zero = true; } } $times[0] = $seconds; return $times; } ?>

Пример

Обработаем несколько значений, показывающих, что функция хорошо обрабатывает как пару минут, так и несколько лет.

<?php // массив секунд $seconds = array(5, 10, 123, 456, 789, 1234, 5678, 9012, 12345, 67890, 123456, 789012345, 7890512345); // значения времени $times_values = array('сек.','мин.','час.','д.','лет'); foreach ($seconds as $second) { echo $second . ' сек. = '; $times = seconds2times($second); for ($i = count($times)-1; $i >= 0; $i--) { echo $times[$i] . ' ' . $times_values[$i] . ' '; } echo '<br>'; } ?>

Результат

5 сек. = 5 сек. 10 сек. = 10 сек. 123 сек. = 2 мин. 3 сек. 456 сек. = 7 мин. 36 сек. 789 сек. = 13 мин. 9 сек. 1234 сек. = 20 мин. 34 сек. 5678 сек. = 1 час. 34 мин. 38 сек. 9012 сек. = 2 час. 30 мин. 12 сек. 12345 сек. = 3 час. 25 мин. 45 сек. 67890 сек. = 18 час. 51 мин. 30 сек. 123456 сек. = 1 д. 10 час. 17 мин. 36 сек. 789012345 сек. = 25 лет 7 д. 2 час. 5 мин. 45 сек. 7890512345 сек. = 250 лет 75 д. 8 час. 59 мин. 5 сек.

Послесловие

Если хотите склонять числа, то прочтите статью: Склонение числительных на PHP.

Категории

ПрограммированиеPHPДата и времяДата и время в PHP

Комментарии

Артём Фёдоров

Всегда пожалуйста!

Ответить
Борис Заболотских

Большое спасибо! Помогла ваша функция ;)

Ответить
Артём Фёдоров

Функция second2times обновилась, пользователем был обнаружен баг, в результате которого возвращались неверные данные.

Ответить