如何将 h:m:s 转换为浮点数和将浮点数转换为 h:m:s php

How to convert h:m:s to float and float to h:m:s php

我想将秒的时间值转换为浮点数,然后对其进行一些计算,然后使用 php

再次将其转换为时间值

我使用了下面描述的函数,但它只有小时和分钟计算,如果有第二个值,它会显示错误的数量。

我从 time conversion to float

找到了这个函数

我使用函数将时间转换为浮点数是

function hours_tofloat($val){
    if (empty($val)) {
        return 0;
    }
    $parts = explode(':', $val);
    return $parts[0] + floor(($parts[1]/60)*100) / 100;
}

hours_tofloat("00:02:37"); 如果我将上面的函数用于 00:02:37 时间值,它会给我错误的 float no 0.03 因为上面的函数没有第二个选项。所以帮助我并指导如何计算它

修改你的代码如下。它将 return 时间 seconds.

$val = '00:02:37';
function hours_tofloat($val){
    if (empty($val)) {
        return 0;
    }
    $parts = explode(':', $val);
    return (int) (($parts[0] * 60 *60) + $parts[1]*60 + $parts[2]);
}

echo hours_tofloat($val);

输出:00:02:37 = 157

它returns

157

$val = "00:02:37";
/* function converts time value to float */
function time_to_float($val){
 $parts = explode(':', $val);
 $hour_val = 0;
 $hour_val = $parts[0];
 $min_val    = $parts[1]; 
 $second_val = $parts[2]; 
 return ($hour_val +(($min_val* 1/60))+($second_val * 1/3600));
}
$value = time_to_float($val);// 0.043611111111111

/* function to convert float to time */
$res = float_to_time($value);//00:02:37

 function float_to_time($value){
    $value1 = explode('.',$value);
    $hours = $value1[0];
    $min_in_float = ($value - $hours) * 60/1;
    $min_val = explode('.',$min_in_float);
    $min_val = $min_val[0];
    $min_in_float = $min_in_float - $min_val;
    $second_val = $min_in_float * 60/1;
    $second_val = round($second_val);
    if($hours < 10){
        $hours = "0".$hours;
    }
    if($min_val < 10){
        $min_val = "0".$min_val;
    }
    if($second_val < 10){
        $second_val = "0".$second_val;
    }
    
    return $hours.":".$min_val.":".$second_val;
 }

我从

那里得到了关于计算的参考

https://www.calculatorsoup.com/calculators/time/time-to-decimal-calculator.php https://www.calculatorsoup.com/calculators/time/decimal-to-time-calculator.php

为什么不用EPOCH时间例程?纪元时间是一个整数,表示基于 1970 年 1 月 1 日的秒数。您不需要日期部分,因此您可以采用以下方法:

<?php
  $time = '00:02:37';
  $date = new DateTime("1970-01-01T$time+00:00");
  echo 'Seconds = '.$date->format('U');
?>

输出

Seconds = 157

有了strtotime,我立即得到秒数。必须使用 UTC 作为时区。

$time = '00:02:37';
$seconds = strtotime('1970-01-01 '.$time.' UTC'); //157

gmdate可用于将整数转换为时间H:i:s.

$seconds = 157;
$timeHis = gmdate('H:i:s',strtotime('1970-01-01 UTC +'.$seconds.' Seconds'));
//'00:02:37'

小时数不得超过 23,秒数 $seconds 必须小于 86400(= 1 天)。也不支持负数。