2012-05-30 76 views
1

所以我有一个30:13(分钟:秒)格式的播客长度数组,我想先转换为有效的UNIX时间戳,然后将此时间戳格式化为可读性,如“30分钟13秒”。PHP - 如何获得时间戳的持续时间?

我皈依了时间戳功能如下:

public function duration($str) { 
    $a = explode(':', $str); 
    $v = (($a[0]*60)+$a[1]); 
    return $v; 
} 

的问题出现时,我尝试用date('H:i:s', $v)产生号码,如格式化这个“17点35分50秒”时,有没有办法在地狱播客长达17小时。我究竟做错了什么?

+2

这不是'date()'的工作方式。 –

+1

这也不是unix时间戳的工作方式:p。 – Corbin

+0

@ IgnacioVazquez-Abrams在哪些方面不适用这种方式?请详细说明。 –

回答

3

UNIX时间戳不是用于计算的持续时间,他们表示,因为时代(1970年开始)的具体时间为秒。如果您将一个非常低的值传递给期望时间戳的函数,例如date(),那么您将从1970年代早期获得一个日期。您必须手动执行时间格式设置。

编辑:请注意,如果您住在GMT时区,您将得到您预期的结果。这是因为date()在计算从时间戳生成的日期时考虑了当前的时区。

1

只要格式化为可读的字符串。

$duration = '30:13'; 
list($min, $sec) = explode(':', $duration); 
echo "{$min}mins {$sec}s"; // 30mins 13s 
+0

我想以一种格式,我可以以多种方式显示,这就是为什么我想使用时间戳。我想将它存储在数据库列中并稍后格式化。 –

1

这应该做你想要的工作。时间戳的东西不同的充,看到http://en.wikipedia.org/wiki/Timestamp

// $str has the format 'mm:ss' 
public function duration($str) { 
    list($min, $sec) = explode(':', $str); 
    return $min . ' mins ' . $sec . ' sec'; 
} 
1

使用简单的regex

function duration($str) 
{ 
    return preg_replace('/^([0-9]{2})\:([0-9]{2}$)/', '$1 mins $2s', $str); 
} 
echo duration("30:33"); 

输出

30 mins 33s 

希望这有助于你。谢谢!!

1

你可以尝试为HH:mm:ss的

list($hours,$mins,$secs) = explode(':', $yourtime); 
echo $hours.' hours '.$mins .'minuts'. $secs .'seconds'; 

可能这项工作

1

Unix时间戳为您提供了从1970年1月1日00:00:00通过秒为单位,而不是时间段。

为了实现你的任务,我会怎么做:

$str = '30:13'; 

function duration($str) { 

    $a = explode(':', $str); 

    $hours = floor($a[0]/60); 

    $minutes = $a[0] - $hours * 60; 

    $seconds = $a[1]; 

    $result = ''; 

    if($hours) { 

     $result .= "$hours hours "; 

    } 

    if($minutes) { 

     $result .= "$minutes minutes "; 

    } 

    return "$result$seconds seconds"; 

} 

var_dump(duration($str)); 
1

可以使用DateInterval对象。

function getInterval($durationString) { 
    $parts = explode(':', $durationString); 
    $min = $parts[0]; 
    $sec = $parts[1]; 

    $interval = new DateInterval("PT{$min}M{$sec}S"); 
    return $interval; 
} 

$interval = getInterval('30:12'); 
echo $interval->format('%imins %ss'); 

我假设你使用的持续时间格式只有分钟和秒,当然如果你还需要小时,你可以修改代码。

相关问题