Вы можете авторизоваться через ВКонтакте, Фейсбук и оставить комментарий


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

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

Функция seconds2times

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?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(6036008640031536000);
    
    for (
$i 3$i >= 0$i--)
    {
        
$period floor($seconds/$periods[$i]);
        if ((
$period 0) || ($period == && $count_zero))
        {
            
$times[$i+1] = $period;
            
$seconds -= $period $periods[$i];
            
            
$count_zero true;
        }
    }
    
    
$times[0] = $seconds;
    return 
$times;
}

?>

Пример

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

// массив секунд
$seconds = array(51012345678912345678901212345678901234567890123457890512345);

// значения времени
$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>';
}

?>

Результат

1
2
3
4
5
6
7
8
9
10
11
12
13
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.

Опубликовано: 29 апреля 2011  ·  Автор: Артём Фёдоров  ·  13152 просмотра

Категория

ГлавнаяПрограммированиеPHPДата и времяСекунды в дни-часы-минуты (PHP)

Чтобы оставить комментарий нужно авторизоваться на сайте
или войти через ВКонтакте или Фейсбук

Войти через ФейсбукВойти через Твиттер

Комментарии

Всегда пожалуйста!
Артём Фёдоров · 3 года назад
Большое спасибо! Помогла ваша функция ;)
Борис Заболотских · 3 года назад
Функция second2times обновилась, пользователем был обнаружен баг, в результате которого возвращались неверные данные.
Артём Фёдоров · 6 лет назад
Дата и время, PHP, Программирование

© 2010-2017 expange.ru
При полном или частичном копировании статей сайта, ссылка на источник обязательна.

Хотите узнать больше информации, пишите на: artem@expange.ru

Полезное онлайн  ·  Новости  ·  Изображения  ·  Статьи по датам

О проекте  ·  Правила пользования  ·  Представительства

Благодарности и пожелания