2011-01-05 89 views
7

是否有一种原生的方式,使用PHP 5.3做"HH:MM:SS" to seconds,而不是对冒号进行拆分,然后将每个段的相关数字加起来计算秒数?如何使用PHP将“HH:MM:SS”字符串转换为秒?


例如在Python中,你可以这样做:

string time = "00:01:05"; 
double seconds = TimeSpan.Parse(time).TotalSeconds; 

+2

等效将'DateInterval :: createFromDateString('00:01:05' ) - >格式(ARG);'但不幸的是,没有一个参数['format'](HTTP ://de.php.net/manual/en/dateinterval.format.php)将返回总秒数(不同于总天数)。 – Gordon 2011-01-05 15:22:56

+0

@Glavić这个问题比这个更新。 – benjisail 2014-01-13 08:53:07

回答

22

的快捷方式:

echo strtotime('01:00:00') - strtotime('TODAY'); // 3600 
+0

是的,在代码行中的快速方式,但速度不快 - strtotime()是一个非常慢的函数。 – Spudley 2011-01-05 14:30:22

+1

@Spudley:实际上它不是,与'list','explode','mktime'组合相比。基准测试告诉我'strtotime'速度更快,但是谁在乎,这是微型优化。 – netcoder 2011-01-05 14:38:16

+1

我希望看到一些基准。 'strtotime()'对字符串做了很多工作来解析它;如果它比mktime()更快运行,我会感到非常惊讶。 (说实话,按照原始问题乘以原则仍然是最快的选择)。 – Spudley 2011-01-05 14:52:45

7

这应该做的伎俩:

list($hours,$mins,$secs) = explode(':',$time); 
$seconds = mktime($hours,$mins,$secs) - mktime(0,0,0); 
+1

希望你不要介意,我编辑了你的答案。如果从'mktime()'中选择'$ month','$ day'和'$ year'参数,它将使用当前的月份,日期和年份。因此,您需要减去自午夜当前日期以来的秒数,以便从指定的'$ time'中获取秒数。 – Travesty3 2012-12-28 17:12:00

+0

@ Travesty3 - 没问题;编辑答案是本网站精神的一部分,所以如果您看到需要编辑的答案,请立即进行编辑。 – Spudley 2012-12-28 20:12:24

+0

@ Travesty3:我认为1970-1-1的设置日期会更快,因为它是一个'mktime'调用而不是2个。使用示例:'$ seconds = mktime($ hours,$ mins,$ secs,1 ,1,1970);' – 2014-01-02 01:00:07

2

不幸的是 - 因为PHP没有强类型,所以没有时间类型的概念,因此也没有办法在这样的字符串和“秒”值之间进行转换。

因此,在实践中,人们经常将字符串拆分,并像您提到的那样将每个部分放大。

4

我觉得将是最简单的方法来使用strtotime()功能:

$time = '21:30:10'; 
$seconds = strtotime("1970-01-01 $time UTC"); 
echo $seconds; 

demo


功能date_parse()也可以用来解析日期和时间:

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

demo

+0

UTC在这里非常有用,因为夏令时可能会搞砸了。 – 2017-08-18 04:20:32