关于php:将HH:MM:SS格式的时间转换为仅秒?

Convert time in HH:MM:SS format to seconds only?

如何将格式HH:MM:SS的时间转换为平秒数?

附: 时间有时可能只有格式MM:SS


不需要explode任何东西:

1
2
3
4
5
6
7
$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;

如果您不想使用正则表达式:

1
2
3
4
5
$str_time ="2:50";

sscanf($str_time,"%d:%d:%d", $hours, $minutes, $seconds);

$time_seconds = isset($hours) ? $hours * 3600 + $minutes * 60 + $seconds : $minutes * 60 + $seconds;


我认为最简单的方法是使用strtotime()函数:

1
2
3
4
5
6
7
8
9
$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;

demo

函数date_parse()也可用于解析日期和时间:

1
2
3
$time = '21:30:10';
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];

demo

如果您将使用strtotime()date_parse()解析格式MM:SS,它将失败(date_parse()用于strtotime()DateTime),因为当您输入格式如xx:yy时,解析器假定它而不是MM:SS。我建议检查格式,如果只有MM:SS,则前缀00:

demo strtotime() demo date_parse()

如果你有超过24小时,那么你可以使用下一个功能(它适用于MM:SSHH:MM:SS格式):

1
2
3
4
5
function TimeToSec($time) {
    $sec = 0;
    foreach (array_reverse(explode(':', $time)) as $k => $v) $sec += pow(60, $k) * $v;
    return $sec;
}

demo


在伪代码中:

1
2
split it by colon
seconds = 3600 * HH + 60 * MM + SS


1
2
    $time = 00:06:00;
    $timeInSeconds = strtotime($time) - strtotime('TODAY');

试试这个:

1
2
3
4
5
6
7
8
9
$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;


您可以使用strtotime函数返回today 00:00:00的秒数。

1
$seconds= strtotime($time) - strtotime('00:00:00');


简单

1
2
3
4
5
6
7
8
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;
}

1
2
3
4
5
6
7
8
9
10
<?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];