PHP中十进制时间的转换

将时间值转换为代表分钟数的十进制值对于某些计算可能很有用。以下函数将时间作为hh:mm:ss的字符串,并以分钟为单位返回一个十进制值。

/**
 * 把时间转换成十进制时间。
 *
 * @param string $time The time to convert
 *
 * @return integer The time as a decimal value.
 */
function time_to_decimal($time) {
    $timeArr = explode(':', $time);
    $decTime = ($timeArr[0]*60) + ($timeArr[1]) + ($timeArr[2]/60);
 
    return $decTime;
}

如果我们采用11:11:11的时间,则explode()函数将其分为小时,分钟和秒,分为三部分,然后按以下方式进行处理:

Minutes = (Hours x 60) + (Minutes) + (Seconds / 60)
Minutes = (11 x 60) + (11) + (11 / 60)
Minutes = (660) + (11) + (0.18333333)
Minutes = 671.18333333

该功能可以如下使用:

echo time_to_decimal("11:11:11"); // prints 671.18333333

此函数的相反操作采用十进制值,并以hh:mm:ss格式返回字符串。

/**
 * 将十进制时间转换为以下格式的时间 hh:mm:ss
 *
 * @param integer The time as a decimal value.
 *
 * @return string $time The converted time value.
 */
function decimal_to_time($decimal) {
    $hours = floor($decimal / 60);
    $minutes = floor($decimal % 60);
    $seconds = $decimal - (int)$decimal;
    $seconds = round($seconds * 60);
 
    return str_pad($hours, 2, "0", STR_PAD_LEFT) . ":" . str_pad($minutes, 2, "0", STR_PAD_LEFT) . ":" . str_pad($seconds, 2, "0", STR_PAD_LEFT);
}

该功能可以如下使用:

echo decimal_to_time(671.18333333); // prints 11:11:11

请注意,这些功能处理的是时间量,而不是一天中的时间。在时间和一天中的小数时间之间进行转换需要一组不同的计算。