2016-11-03 3 views
-1

Я работаю с PHP и попытаться преобразовать десятичное время (чч: мм) , но он не работает с любым кодом и испытана, оригинальная строка из первенствует например:Как преобразовать десятичное время

0.625 = 15:00 
0.53541666666667 = 12:51 
0.40277777777778 = 09:40 
+2

Как '0.625' равен' 15: 00'? –

+1

О, я понял, 0,625 * 24 = 15 – manu

+0

Не могли бы вы показать свой код, который не сработал? – simon

ответ

3
$dec = 0.625; 

Это просто. Для преобразования десятичных знаков часов, сделать умножение 24.

$hours = $dec * 24; 

Теперь для преобразования десятичных знаков hours:mins использования этого:

function convertTime($dec) 
{ 
    // start by converting to seconds 
    $seconds = ($dec * 3600); 
    // we're given hours, so let's get those the easy way 
    $hours = floor($dec); 
    // since we've "calculated" hours, let's remove them from the seconds variable 
    $seconds -= $hours * 3600; 
    // calculate minutes left 
    $minutes = floor($seconds/60); 
    // remove those from seconds as well 
    $seconds -= $minutes * 60; 
    // return the time formatted HH:MM:SS 
    return lz($hours).":".lz($minutes).":".lz($seconds); 
} 

// lz = leading zero 
function lz($num) 
{ 
    return (strlen($num) < 2) ? "0{$num}" : $num; 
} 

echo convertTime($hours); 

Источник:How to convert a decimal into time, eg. HH:MM:SS

Выходной : http://ideone.com/Q7lkwX

4

Обычно я рекомендую использовать класс DateTime для любой арифметики по дате, а не для его ручной работы. Он будет учитывать любые дневные сбережения и т. Д. (Хотя из вашего вопроса неясно, будет ли это желательно).

<?php 
/** 
* @param float $x Decimal number of hours 
* @return string HH:mm 
*/ 
function dec_hours($x) { 
    $sec = intval($x * (24 * 60 * 60)); 
    $date = new DateTime("today +$sec seconds"); 
    return $date->format('H:i'); 
} 

echo dec_hours(0.625);   // 15:00 
echo dec_hours(0.53541666666667); // 12:51 
echo dec_hours(0.40277777777778); // 09:40 
+0

это работает идеально для меня !! – a2rgzz

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