将时间值转换为代表分钟数的十进制值对于某些计算可能很有用。以下函数将时间作为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
请注意,这些功能处理的是时间量,而不是一天中的时间。在时间和一天中的小数时间之间进行转换需要一组不同的计算。