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

Rya*_*yan 67 php time

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

PS时间有时可能MM:SS只是格式化.

Tim*_*per 119

不需要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;
Run Code Online (Sandbox Code Playgroud)

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

$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;
Run Code Online (Sandbox Code Playgroud)


Gla*_*vić 93

我认为最简单的方法是使用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;
Run Code Online (Sandbox Code Playgroud)

demo


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

$time = '21:30:10';
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
Run Code Online (Sandbox Code Playgroud)

demo


如果将解析格式MM:SSstrtotime()date_parse()将失败(date_parse()在使用strtotime()DateTime),因为当你这样输入格式xx:yy分析器假设它是HH:MMMM:SS.我建议检查格式,00:如果只有,则建议MM:SS.

demo strtotime() demo date_parse()


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

function TimeToSec($time) {
    $sec = 0;
    foreach (array_reverse(explode(':', $time)) as $k => $v) $sec += pow(60, $k) * $v;
    return $sec;
}
Run Code Online (Sandbox Code Playgroud)

demo

  • `strtotime()` 不允许超过 24 小时 - 使用 25 或更高将返回“false”。 (2认同)
  • 您超过 24 小时的第三个答案正是我所需要的。`array_reverse` 并在 `:` 上爆炸,然后通过 `foreach` 和另一个 `pow` 引起更多的旅行(这样 *hh:mm* 和 *hh:mm:ss* 都可以在不修改函数的情况下工作)是天才的一击。卓越的代码。我很难想象一个更有效的例子。谢谢! (2认同)

Can*_*ice 7

在伪代码中:

split it by colon
seconds = 3600 * HH + 60 * MM + SS
Run Code Online (Sandbox Code Playgroud)

  • 正如他所写,这是伪代码."假装代码"来解释如何完成某些事情. (6认同)
  • 它是否是伪代码并不重要,因为这个问题需要支持 MM:SS 格式,而这个答案并不支持。 (2认同)

spa*_*ane 7

    $time = 00:06:00;
    $timeInSeconds = strtotime($time) - strtotime('TODAY');
Run Code Online (Sandbox Code Playgroud)


meh*_*and 6

您可以使用该strtotime函数从 返回秒数today 00:00:00

$seconds= strtotime($time) - strtotime('00:00:00');
Run Code Online (Sandbox Code Playgroud)


Cha*_*ndu 5

试试这个:

$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;
Run Code Online (Sandbox Code Playgroud)

  • 现在就试试.当然,您可以传递类似"898989:8989898:899899"的内容,但我假设将在代码达到秒计算之前输入的时间进行基本验证. (2认同)