2013-07-23 1 views
2

У меня есть следующая php-функция, которая принимает аргумент времени в секундах от базы данных. Секунды имеют тип float (6,1) в базе данных. Затем я передаю это значение функции ниже. Проблема у меня есть, если у меня есть 1655,5 секунд, я могу получить час, минуты и секунды. Но как мне получить миллисекунды, которые остаются.Преобразование секунд (float) в mm: ss: ms in php

т.е. 1655.5 = 27м: 35s.5ms

Спасибо за любую помощь заранее.

<?php 
    function convertTo($init) 
    { 
      $hours = ($init/3600); 
      $minutes = (($init/60) % 60); 
      $seconds = $init % 60; 

      if($minutes < 10) 
      { 
       $minutes = "0".$minutes; 
      } 

      if($seconds < 10) 
      { 
       $seconds = "0".$seconds; 
      } 

      $milli = /* code to ret the remaining milliseconds */ 
      $stageTime = "$minutes:$seconds.$milli"; 
      return $stageTime; 
    } 

?> 

ответ

3

Возможно несколько контр-интуитивно, самый простой способ будет извлечь миллисекунды в качестве первого шага.

Просто floor() начальное значение и вычесть результат из ввода. Это даст вам только правую часть десятичной точки, затем вы можете умножить это на 1000, чтобы дать вам количество миллисекунд, которые вы должны затем отличить к целому числу, чтобы гарантировать, что результирующая строка является разумной.

function convertTo($init) 
{ 
     $secs = floor($init); 
     $milli = (int) (($init - $secs) * 1000); 

     $hours = ($secs/3600); 
     $minutes = (($secs/60) % 60); 
     $seconds = $secs % 60; 
     // ... 
1

Я обновил эту функцию с помощью Leading Zero. Теперь время будет показано как 00:00:00. Я использую это в своем проекте Google Analytics, он работает отлично. Надеюсь, это поможет кому-то другому.

<?php 
function convertTo($init) 
{ 
    $init = number_format($init, 2); 
    $secs = floor($init); 
    $milli = (int) (($init - $secs) * 1000); 
    $milli = str_pad($milli, 2, '0', STR_PAD_LEFT); 
    ; 
    $hours = ($secs/3600); 
    $minutes = (($secs/60) % 60); 
    $minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT); 
    $seconds = $secs % 60; 
    $seconds = str_pad($seconds, 2, '0', STR_PAD_LEFT); 
    if ($hours > 1) { 
     $hours = str_pad($hours, 2, '0', STR_PAD_LEFT); 
    } else { 
     $hours = '00'; 
    } 
    $Time = "$hours:$minutes:$seconds"; 
    return $Time; 
} 

?> 
Смежные вопросы