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+$秒实际上,最后一行不应该是:isset($seconds)$小时*3600+$分钟*60+$秒:$小时*60+$分钟;如果没有小时,则需要将小时视为分钟,将分钟视为秒。例如:10:01应该是601秒。我喜欢它$time=“01:23:54:21:30:10”给我一个1087421410秒的答案。现在试试。当然,您可以传递类似“898989:898:899899”的消息,但我假设基本验证将在代码到达秒计算之前输入的时间内完成。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