Секунды в дни-часы-минуты (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 сек.
Теги:
дата
Добавлено: 29 Мая 2018 21:30:55 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...