2011-01-29 93 views

回答

91

无需任何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; 

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

$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; 
4

伪代码:

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

这是PHP吗? 8O – Ryan 2011-01-29 00:06:43

+6

正如他写的,它是伪代码。 “伪装代码”来解释如何做一些事情。 – simme 2011-01-29 00:10:11

0
<?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]; 
+0

如果没有小时的话只有32:32怎么办? – Ryan 2011-01-29 00:08:04

+1

然后它不会工作。您显然需要首先验证格式。并删除第一个$秒+ =部分 – simme 2011-01-29 00:08:51

+1

如何数组翻转$部分?我很好! – Ryan 2011-01-29 00:09:21

-3
// HH:MM:SS or MM:SS 
echo substr($time , "-2"); // returns last 2 chars : SS 
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; 
-1
$time="12:10:05"; //your time 
echo strtotime("0000-00-00 $time")-strtotime("0000-00-00 00:00:00"); 
82

我觉得最简单的方法是使用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; 

demo


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

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

demo


如果将解析格式MM:SSstrtotime()date_parse()它会失败(date_parse()strtotime()使用和DateTime),因为当你输入格式,如xx:yy解析器假定它是HH:MM而不是MM:SS。我建议检查格式,并且如果您只有MM:SS,则需要输入00:

demostrtotime()demodate_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; 
} 

demo

1

简单

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
$time = 00:06:00; 
    $timeInSeconds = strtotime($time) - strtotime('TODAY'); 
0

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

$seconds= strtotime($time) - strtotime('00:00:00'); 
相关问题