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

Php 是否将HH:MM:SS格式的时间转换为仅秒?,php,time,Php,Time,如何将格式为HH:MM:SS的时间转换为固定的秒数 p.S.时间有时可能仅采用格式MM:SS。伪代码: split it by colon seconds = 3600 * HH + 60 * MM + SS 无需爆炸任何东西: $str_time = "23:12:95"; $str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time);

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

p.S.时间有时可能仅采用格式
MM:SS

伪代码:

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

无需
爆炸
任何东西:

$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=“21:30:10”;
$timeArr=array_reverse(explode(“:”,$time));
$seconds=0;
foreach($timeArr作为$key=>$value)
{
如果($key>2)中断;
$seconds+=pow(60,$key)*$value;
}
回声$秒;

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

$time='21:30:10';
$seconds=strotime(“1970-01-01$time UTC”);
回声$秒;
//与对象相同(适用于php5.3+)
$time='21:30:10';
$dt=新日期时间(“1970-01-01$time”,新日期时区(“UTC”);
$seconds=(int)$dt->getTimestamp();
回声$秒;


函数还可用于解析日期和时间:

$time='21:30:10';
$parsed=date\u parse($time);
$seconds=$parsed['hour']*3600+$parsed['minute']*60+$parsed['second'];


如果您将使用
strotime()
date\u parse()
解析格式
MM:SS
,它将失败(
date\u parse()
用于
strotime()
DateTime
),因为当您输入像
xx:yy
这样的格式时,解析器假定它是
HH:MM
,而不是
MM:SS
。我建议检查格式,如果您只有
MM:SS
,请在
00:
前加上前缀


如果您的小时数超过24小时,则可以使用下一个功能(它适用于
MM:SS
HH:MM:SS
格式):

函数TimeToSec($time){
$sec=0;
foreach(array_reverse(explode(“:”,$time))为$k=>$v)$sec+=pow(60,$k)*$v;
返回$sec;
}
简单

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;
}

您可以使用
strotime
功能返回从
今天00:00:00开始的秒数

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


如果只有32:32没有时间怎么办?那就不行了。显然,首先需要验证格式。并删除前$seconds+=部分翻转数组有什么帮助?没有。。如果HH不存在,翻转数组将导致秒数被视为小时。正如他所写,这是伪代码。“假装代码”来解释如何做某事。不管它是否是伪代码,因为这个问题需要支持MM:SS格式,而这个答案不需要。很好的解决方案。但是如果HH不存在,这不会中断吗?只是修复了它,这样它就不会出现。当使用时间函数时,我不得不在时区之间进行调整,以使其正确,但这要简单得多。最后一行中的错误:
$time\u seconds=isset($seconds)$小时*3600+$分钟*60+$秒:$小时*60+$分钟应该是
$time\u seconds=isset($hours)$小时*3600+$分钟*60+$秒:$分钟*60+$秒strotime()
不允许时间超过24小时-使用25或更高的值将返回“false”。对于超过24小时的时间,您的第三个答案正是我所需要的。
array\u反转
并在
上爆炸,然后在
foreach
和另一个
pow
(这样hh:mm和hh:mm:ss都可以在不修改函数的情况下工作)中再次触发,这是一种天才之举。卓越的代码。我很难想象一个更有效的例子。谢谢我只是看了第一个答案,然后想,如果我使用Unix时代。。。请投我一票!第三个选项适用于我可以抛出的所有有效格式。第一个选项
$seconds=strotime(“1970-01-01$time UTC”)
应该是最短的答案,也是可以接受的答案。
1970-01-01
的使用很亲切!虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!
    $time = 00:06:00;
    $timeInSeconds = strtotime($time) - strtotime('TODAY');
$seconds= strtotime($time) - strtotime('00:00:00');
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