Посчитать сколько времени прошло (PHP)

Чтобы посчитать сколько времени прошло в секундах/минутах/часах/днях/годах, то делать это нежно отталкиваясь от количества секунд. Нужно шаг за шагом вычислять сперва минуты, затем часы, затем дни.

Лучше всего написать простую функцию, которая будет принимать число (секунды) и возвращать массив с данными.

Функция array periodAgo($seconds)

Назовем функцию array periodAgo($seconds), которая принимает параметр $seconds и возвращает array.

<?php /** * Функция принимает секунды и преобразует в секунды/минуты/часы/дни * Результатом выполнения функции будет ассоциативный массив: * [ * 'seconds' => Секунды, * 'minutes' => Минуты, * 'hours' => Часы, * 'days' => Дни, * 'years' => Годы * ] * @param int $seconds * * @return array */ function periodAgo($seconds) { $times = [ 'seconds' => $seconds, 'minutes' => 0, 'hours' => 0, 'days' => 0, 'years' => 0 ]; // Считаем минуты $minutes = floor($seconds / 60); if ($minutes > 0) { $seconds -= $minutes * 60; $times['seconds'] = $seconds; $times['minutes'] = $minutes; // Считаем часы $hours = floor($minutes / 60); if ($hours > 0) { $minutes -= $hours * 60; $times['minutes'] = $minutes; $times['hours'] = $hours; // Считаем дни $days = floor($hours / 24); if ($days > 0) { $hours -= $days * 24; $times['hours'] = $hours; $times['days'] = $days; // Считаем годы $years = floor($days / 365); if ($years > 0) { $days -= $years * 365; $times['days'] = $days; $times['years'] = $years; } } } } return $times; }

Пример

Посмотрим на примере работу функции.

<?php $times = [ 101, 2029, 30038, 400047, time(), ]; foreach ($times as $time) { print_r(periodAgo($time)); }

Результат

В результате на экране будет выведено следующее:

Array ( [seconds] => 41 [minutes] => 1 [hours] => 0 [days] => 0 [years] => 0 ) Array ( [seconds] => 49 [minutes] => 33 [hours] => 0 [days] => 0 [years] => 0 ) Array ( [seconds] => 38 [minutes] => 20 [hours] => 8 [days] => 0 [years] => 0 ) Array ( [seconds] => 27 [minutes] => 7 [hours] => 15 [days] => 4 [years] => 0 ) Array ( [seconds] => 5 [minutes] => 9 [hours] => 15 [days] => 142 [years] => 48 )

Заключение

Единственное что может быть не очень эстетично — это вывод количества лет, т.к. не учитываются високосные года.

На сайте уже была подобная статья: Секунды в дни-часы-минуты (PHP)

Категории

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

Читайте также

Комментарии