Возможные дубликаты:
Выходной сигнал находится в секундах. преобразовать в hh: mm: ss format в php
Как я могу показать секунда назад / минуты назад / с отметкой времени unix?
У меня есть пользовательский онлайн-скрипт, над которым я работаю. Пока это выглядит следующим образом …
while ($online_user = $q -> fetch(PDO::FETCH_ASSOC)) { $last_active = time() - $online_user['online']; echo '<p>' . $online_user['username'] . ' was last active ' . $last_active . ' seconds ago.</p>'; }
$ online_user ['online'] – последний раз () пользователь был активным на сайте. Поэтому, когда я минус это с текущего времени (), это дает мне количество секунд назад, что они были в последний раз активны.
Вещь в тот момент, когда это звучит так:
Some username was last active 567 seconds ago.
Я хотел бы знать, как я могу заставить его откликнуться, чтобы вместо этого преобразовать его в минуты и секунды, чтобы он выглядел примерно так:
Some username was last active 9 minutes and 27 seconds ago.
Спасибо заранее, если вы знаете, где бы я ни учился, пожалуйста, напишите ссылку. 🙂
Вы можете разделить на 60, чтобы получить количество минут. Остаток деления – это количество секунд не через минуту.
$minutes = floor($last_active / 60); $seconds = $last_active % 60; echo 'Some username was last active '; if ($minutes > 0) { echo "$minutes minutes "; } if ($seconds > 0) { if ($minutes > 0) { echo "and "; } echo "$seconds seconds "; } echo "ago.";
Это сломает его на минуты и секунды и не выведет минуты или секунды, если они равны нулю (т.е. нет «0 минут и 30 секунд назад». Обратите внимание, если вы когда-либо захотите добавить часы (X часов, Y минут , Z секунд), вы можете использовать один и тот же подход, снова делясь на 60 (60 минут в час, 60 секунд в минуту). Чтобы получить «дни», вы разделите на 24 (24 часа в день).
function sec_to_time($seconds) { $hours = floor($seconds / 3600); $minutes = floor($seconds % 3600 / 60); $seconds = $seconds % 60; return sprintf("%d:%02d:%02d", $hours, $minutes, $seconds); }
Основной процесс – это тот же язык, который вы используете:
mins = floor (secs / 60); secs = secs mod 60; hour = floor (mins / 60); mins = mins mod 60;
$sec = $last_active % 60; $min = ($last_active - $sec) / 60;
У вас могут быть минуты с делением на 60 и секундами с модулем:
$minutes = $last_active / 60; $seconds = $last_actives % 60;
$minutes = $last_active / 60; $seconds = $last_active % 60; echo '<p>' . $online_user['username'].' was last active '.$minutes.' minutes and '.$seconds.' seconds ago.</p>';
вы можете добавить дополнительные, если проверить, нет ли минут 0, чтобы не показывать «минуты и» часть.