【发布时间】:2011-06-17 13:53:58
【问题描述】:
如何将HH:MM:SS格式的时间转换为单位秒数?
P.S.时间有时可能仅采用MM:SS 格式。
【问题讨论】:
如何将HH:MM:SS格式的时间转换为单位秒数?
P.S.时间有时可能仅采用MM:SS 格式。
【问题讨论】:
什么都不需要explode:
$str_time = "23:12:95";
$str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time);
sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);
$time_seconds = $hours * 3600 + $minutes * 60 + $seconds;
如果你不想使用正则表达式:
$str_time = "2:50";
sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);
$time_seconds = isset($seconds) ? $hours * 3600 + $minutes * 60 + $seconds : $hours * 60 + $minutes;
【讨论】:
$time_seconds = isset($seconds) ? $hours * 3600 + $minutes * 60 + $seconds : $hours * 60 + $minutes;应该是$time_seconds = isset($hours) ? $hours * 3600 + $minutes * 60 + $seconds : $minutes * 60 + $seconds;
我认为最简单的方法是使用strtotime()函数:
$time = '21:30:10';
$seconds = strtotime("1970-01-01 $time UTC");
echo $seconds;
// same with objects (for php5.3+)
$time = '21:30:10';
$dt = new DateTime("1970-01-01 $time", new DateTimeZone('UTC'));
$seconds = (int)$dt->getTimestamp();
echo $seconds;
函数date_parse()也可以用于解析日期和时间:
$time = '21:30:10';
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
如果您将使用strtotime() 或date_parse() 解析格式MM:SS,它将失败(date_parse() 用于strtotime() 和DateTime),因为当您输入像xx:yy 这样的格式时,解析器会假定它是HH:MM 而不是MM:SS。我建议检查格式,如果您只有 MM:SS,请在前面加上 00:。
demo strtotime() demo date_parse()
如果你有超过 24 小时,那么你可以使用下一个函数(它适用于 MM:SS 和 HH:MM:SS 格式):
function TimeToSec($time) {
$sec = 0;
foreach (array_reverse(explode(':', $time)) as $k => $v) $sec += pow(60, $k) * $v;
return $sec;
}
【讨论】:
strtotime() 不允许小时数超过 24 - 使用 25 或更高将返回“false”。
array_reverse 并在 : 上爆炸,然后导致再次穿越 foreach 和另一次 pow(因此 hh:mm 和 hh:mm:ss i> 在不修改功能的情况下工作)是天才之举。卓越的代码。我很难想象一个更有效的例子。谢谢!
$seconds = strtotime("1970-01-01 $time UTC"); 应该是最短的答案并且被接受。 1970-01-01 的使用很亲切!
$time = 00:06:00;
$timeInSeconds = strtotime($time) - strtotime('TODAY');
【讨论】:
您可以使用strtotime 函数从today 00:00:00 返回秒数。
$seconds= strtotime($time) - strtotime('00:00:00');
【讨论】:
在伪代码中:
split it by colon
seconds = 3600 * HH + 60 * MM + SS
【讨论】:
试试这个:
$time = "21:30:10";
$timeArr = array_reverse(explode(":", $time));
$seconds = 0;
foreach ($timeArr as $key => $value)
{
if ($key > 2) break;
$seconds += pow(60, $key) * $value;
}
echo $seconds;
【讨论】:
简单
function timeToSeconds($time)
{
$timeExploded = explode(':', $time);
if (isset($timeExploded[2])) {
return $timeExploded[0] * 3600 + $timeExploded[1] * 60 + $timeExploded[2];
}
return $timeExploded[0] * 3600 + $timeExploded[1] * 60;
}
【讨论】:
function time2sec($time) {
$durations = array_reverse(explode(':', $item->duration));
$second = array_shift($durations);
foreach ($durations as $duration) {
$second += (60 * $duration);
}
return $second;
}
echo time2sec('4:52'); // 292
echo time2sec('2:01:42'); // 7302
【讨论】:
$item->duration,它应该被$time替换。它可能应该进行一些转换。
<?php
$time = '21:32:32';
$seconds = 0;
$parts = explode(':', $time);
if (count($parts) > 2) {
$seconds += $parts[0] * 3600;
}
$seconds += $parts[1] * 60;
$seconds += $parts[2];
【讨论】: