Выход в секундах.преобразовать в формат чч: мм: сс в php - PullRequest
41 голосов
/ 21 августа 2010
  1. Мой вывод в формате 290,52262423327 секунд.Как я могу изменить это на 00: 04: 51?

  2. Тот же вывод, который я хочу показать в секундах и в формате ЧЧ: ММ: СС, поэтому если это секунды, я хочупоказывать только 290,52 секунды (только два целых числа после десятичной точки)?Как я могу это сделать?

Я работаю в PHP и вывод присутствует в переменной $time.хочу изменить $time на $newtime с ЧЧ: ММ: СС и $newsec как 290,52.

Спасибо:)

Ответы [ 11 ]

91 голосов
/ 21 августа 2010

1)

function foo($seconds) {
  $t = round($seconds);
  return sprintf('%02d:%02d:%02d', ($t/3600),($t/60%60), $t%60);
}

echo foo('290.52262423327'), "\n";
echo foo('9290.52262423327'), "\n";
echo foo(86400+120+6), "\n";

отпечатки

00:04:51
02:34:51
24:02:06

2)

echo round($time, 2);
12 голосов
/ 15 июля 2014

Попробуйте это

echo gmdate("H:i:s", 90);
4 голосов
/ 21 августа 2010
$iSeconds = 290.52262423327;
print date('H:i:s', mktime(0, 0, $iSeconds));
2 голосов
/ 21 августа 2010

Попробуйте это:

$time = 290.52262423327;
echo date("h:i:s", mktime(0,0, round($time) % (24*3600)));
1 голос
/ 22 апреля 2015

Попробуйте это :)

private function conversionTempsEnHms($tempsEnSecondes)
    {
        $h = floor($tempsEnSecondes / 3600);
        $reste_secondes = $tempsEnSecondes - $h * 3600;

        $m = floor($reste_secondes / 60);
        $reste_secondes = $reste_secondes - $m * 60;

        $s = round($reste_secondes, 3); 
        $s = number_format($s, 3, '.', '');

        $h = str_pad($h, 2, '0', STR_PAD_LEFT);
        $m = str_pad($m, 2, '0', STR_PAD_LEFT);
        $s = str_pad($s, 6, '0', STR_PAD_LEFT);

        $temps = $h . ":" . $m . ":" . $s;

        return $temps;
    }
1 голос
/ 23 февраля 2015

Я не знаю, является ли это наиболее эффективным способом, но если вам также нужно отображать дни, это работает:

function foo($seconds) { 
$t = round($seconds); 
return sprintf('%02d  %02d:%02d:%02d', ($t/86400%24), ($t/3600) -(($t/86400%24)*24),($t/60%60), $t%60);
}
0 голосов
/ 09 марта 2019

Если вы используете Carbon (например, в Laravel), вы можете сделать это:

$timeFormatted = \Carbon\Carbon::now()->startOfDay()->addSeconds($seconds)->toTimeString();

Но $timeFormatted = date("H:i:s", $seconds);, вероятно, достаточно хорош.

Просто посмотрите предостережения .

0 голосов
/ 08 октября 2018

Лично, уходя от ответов других людей, я сделал свой собственный парсер.Работает с днями, часами, минутами и секундами.И должен легко расширяться до недель / месяцев и т. Д. Он также работает с десериализацией до c #

function secondsToTimeInterval($seconds) {
    $t = round($seconds);
    $days = floor($t/86400);
    $day_sec = $days*86400;
    $hours = floor( ($t-$day_sec) / (60 * 60) );
    $hour_sec = $hours*3600;
    $minutes = floor((($t-$day_sec)-$hour_sec)/60);
    $min_sec = $minutes*60;
    $sec = (($t-$day_sec)-$hour_sec)-$min_sec;
    return sprintf('%02d:%02d:%02d:%02d', $days, $hours, $minutes, $sec);
}
0 голосов
/ 21 августа 2010

1)

$newtime = sprintf( "%02d:%02d:%02d", $time / 3600, $time / 60 % 60, $time % 60 );

2)

$newsec = sprintf( "%.2f", $time );
0 голосов
/ 21 августа 2010

Numero uno ... http://www.ckorp.net/sec2time.php (используйте эту функцию)

Numero duo ... echo round(290.52262423327,2);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...