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