How to convert a decimal into time, eg. HH:MM:SS

前端 未结 5 1039
栀梦
栀梦 2020-12-09 12:01

I am trying to take a decimal and convert it so that I can echo it as hours, minutes, and seconds.

I have the hours and minutes, but am breaking my brain trying to f

相关标签:
5条回答
  • 2020-12-09 12:07

    I am not sure if this is the best way to do this, but

    $variabletocutcomputation = 60 * ($dec - $hour);
    $min = round($variabletocutcomputation);
    $sec = round((60*($variabletocutcomputation - $min)));
    
    0 讨论(0)
  • 2020-12-09 12:16

    Everything upvoted didnt work in my case. I have used that solution to convert decimal hours and minutes to normal time format. i.e.

    function clockalize($in){
    
        $h = intval($in);
        $m = round((((($in - $h) / 100.0) * 60.0) * 100), 0);
        if ($m == 60)
        {
            $h++;
            $m = 0;
        }
        $retval = sprintf("%02d:%02d", $h, $m);
        return $retval;
    }
    
    
    clockalize("17.5"); // 17:30
    
    0 讨论(0)
  • 2020-12-09 12:19

    This is a great way and avoids problems with floating point precision:

    function convertTime($h) {
        return [floor($h), (floor($h * 60) % 60), floor($h * 3600) % 60];
    }
    
    0 讨论(0)
  • 2020-12-09 12:26

    If $dec is in hours ($dec since the asker specifically mentioned a decimal):

    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;
    }
    
    0 讨论(0)
  • 2020-12-09 12:28

    Very simple solution in one line:

    echo gmdate('H:i:s', floor(5.67891234 * 3600));
    
    0 讨论(0)
提交回复
热议问题