由于某些原因,我将时间格式转换为:03:30至秒3 * 3600 + 30 * 60,现在
。我想将其转换回上述的第一个(相同)格式。怎么做呢?
我的尝试:
3*3600 + 30*60 = 12600
12600 / 60 = 210 / 60 = 3.5, floor(3.5) = 3 = hour
现在,分钟怎么办?
考虑到值可能是像 19:00或02:51
这样的形式,我想你已经明白了。
顺便问一下,如何使用正则表达式将 2:0
转换为 02:00
?
$hours = floor($seconds / 3600);
$mins = floor($seconds / 60 % 60);
$secs = floor($seconds % 60);
如果你想获得时间格式:
$timeFormat = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
$secs = floor(($seconds - ($hours*3600) - ($mins*60)));
- Attila Fulopfloor
表示向下取整。@Dewan159 - Cullub(int) ($seconds % 60)
替代 floor()
函数。将数值转换为整型只会移除小数部分,因此 -1.1 将变成 -1。如果使用 floor()
,则 -1.1 将变成 -2。 - William Randokun%02d
,则不需要使用floor
。 - Guilherme Nascimentoabs($seconds)
,在使用 $sign = $seconds <0? '-' : '';
之前检查符号,并将其添加到时间之前。
否则,在有负秒数/时间时,结果不正确。 - Dominik Mayrhofer如果你知道的时间少于一小时,你可以直接使用date()
或$date->format()
函数。
$minsandsecs = date('i:s',$numberofsecs);
这个工作的原因是系统纪元时间从午夜开始(1970年1月1日,但这对你不重要)。
如果时间在1小时以上但少于1天,则可以使用“小时:分钟:秒”格式输出,其中包含 `
$hoursminsandsecs = date('H:i:s',$numberofsecs);
如果超过一天,您需要使用模运算来计算天数,因为这是纪元开始日期变得相关的地方。
希望能有所帮助。
if ($numberofsecs > 86400) $numberofsec -= 86400;
这样就有效地从1970年1月0日开始计算了。 - Tilman Koesterdate(0)
。结果将会是3:00。 - Samuel Hapak或许最简单的方法是:
gmdate('H:i:s', $your_time_in_seconds);
设 $time
为以秒为单位的时间。
$seconds = $time % 60;
$time = ($time - $seconds) / 60;
$minutes = $time % 60;
$hours = ($time - $minutes) / 60;
现在,小时、分钟和秒分别为$hours
、$minutes
和$seconds
。
另一种解决方案可以将传入的秒数转换成天、小时、分钟和秒:
function seconds_to_time($secs)
{
$dt = new DateTime('@' . $secs, new DateTimeZone('UTC'));
return array('days' => $dt->format('z'),
'hours' => $dt->format('G'),
'minutes' => $dt->format('i'),
'seconds' => $dt->format('s'));
}
print_r(seconds_to_time($seconds_value);
如果时间超过一年,则需要额外的逻辑来处理“天数”。使用 str_pad() 或 ltrim() 函数来添加/删除前导零。
ITroubs的答案没有处理剩余的秒数,当你想使用这段代码将秒数转换为时间格式如小时: 分钟: 秒时。
这是我处理它的方法:(这还会为一位数的分钟和秒数添加前导零)
$seconds = 3921; //example
$hours = floor($seconds / 3600);
$mins = floor(($seconds - $hours*3600) / 60);
$s = $seconds - ($hours*3600 + $mins*60);
$mins = ($mins<10?"0".$mins:"".$mins);
$s = ($s<10?"0".$s:"".$s);
$time = ($hours>0?$hours.":":"").$mins.":".$s;
在这个例子中,$time将包含"1:05:21"。
SELECT SEC_TO_TIME(my_seconds_field) AS my_timestring;
something like this?
if(is_numeric($time)){
$value = array(
"years" => 0, "days" => 0, "hours" => 0,
"minutes" => 0, "seconds" => 0,
);
if($time >= 31556926){
$value["years"] = floor($time/31556926);
$time = ($time%31556926);
}
if($time >= 86400){
$value["days"] = floor($time/86400);
$time = ($time%86400);
}
if($time >= 3600){
$value["hours"] = floor($time/3600);
$time = ($time%3600);
}
if($time >= 60){
$value["minutes"] = floor($time/60);
$time = ($time%60);
}
$value["seconds"] = floor($time);
return (array) $value;
} else{
return (bool) FALSE;
}
grabbed from: http://www.ckorp.net/sec2time.php
抱歉回复晚了,但希望这对你有所帮助。
function mediaTimeDeFormater($seconds)
{
if (!is_numeric($seconds))
throw new Exception("Invalid Parameter Type!");
$ret = "";
$hours = (string )floor($seconds / 3600);
$secs = (string )$seconds % 60;
$mins = (string )floor(($seconds - ($hours * 3600)) / 60);
if (strlen($hours) == 1)
$hours = "0" . $hours;
if (strlen($secs) == 1)
$secs = "0" . $secs;
if (strlen($mins) == 1)
$mins = "0" . $mins;
if ($hours == 0)
$ret = "$mins:$secs";
else
$ret = "$hours:$mins:$secs";
return $ret;
}
echo mediaTimeDeFormater(216.064000);//3:36
gmdate("H:i:s", $seconds%86400)
。 (注:该代码是将给定秒数转换为“小时:分钟:秒”的格式,其中“%86400”是用于将秒数限制在一天内的操作。) - Synchropreg_replace('/^00:/', '', gmdate("H:i:s", $seconds))
- maosmurf