如何将秒转换为时间格式? [复制]

Posted

技术标签:

【中文标题】如何将秒转换为时间格式? [复制]【英文标题】:How to convert seconds to time format? [duplicate] 【发布时间】:2011-04-20 20:31:42 【问题描述】:

出于某种原因,我将时间格式转换为:03:30 to seconds 3*3600 + 30*60, now。我想将它转换回它的第一个(相同)格式。怎么可能?

我的尝试:

3*3600 + 30*60 = 12600 

12600 / 60 = 210 / 60 = 3.5, floor(3.5) = 3 = hour

现在,分钟呢?

考虑到值可以像19:00 or 02:51. 我想你明白了。

顺便说一句,如何转换2:0 for example to 02:00 using RegEx?

【问题讨论】:

【参考方案1】:

这可能更简单

gmdate("H:i:s", $seconds)

php gmdate

【讨论】:

这最多只能工作 24 小时,然后重置为 00:00:00 然后把它换行:gmdate("H:i:s", $seconds%86400) @Synchro 仍然无法正常工作 我喜欢这种从秒计算视频时间的简单性! 这就是我截断领先时间的方式,如果为 0:preg_replace('/^00:/', '', gmdate("H:i:s", $seconds))【参考方案2】:
$hours = floor($seconds / 3600);
$mins = floor($seconds / 60 % 60);
$secs = floor($seconds % 60);

如果要获取时间格式:

$timeFormat = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);

【讨论】:

剩余秒数:$secs = floor(($seconds - ($hours*3600( - ($mins*60)) ); floor 表示向下舍入。 @Dewan159 $days = floor($seconds / 86400); $hours = floor($seconds % 86400 / 3600); 有天的版本 代替地板,你可以使用(int) ($seconds % 60)等等,代替floor()。转换为 int 只会删除小数位,因此 -1.1 变为 -1。使用 floor(),-1.1 将变为 -2。 注意:如果使用%02d,则不需要floor【参考方案3】:

如果您知道时间会少于一个小时,您可以使用date()$date->format() 函数。

$minsandsecs = date('i:s',$numberofsecs);

这是有效的,因为系统纪元时间从午夜开始(1970 年 1 月 1 日,但这对您来说并不重要)。

如果是一个小时或更多但少于一天,您可以使用 `

以 hours:mins:secs 格式输出
$hoursminsandsecs = date('H:i:s',$numberofsecs);

对于超过一天,您需要使用模数来计算天数,因为这与纪元的开始日期相关。

希望对您有所帮助。

【讨论】:

你会如何'使用模数来计算天数'? @tilman:在 PHP 中,使用 % 符号表示模数。其他答案显示了如何做模数,这就是我没有这样做的原因。 如果你只显示天而不显示年,你不能从你的 $numberofsecs 中减去一天(以秒为单位)吗? if ($numberofsecs > 86400) $numberofsec -= 86400; 从 1970 年 1 月 0 日开始生效。 永远不要这样做!!!它是神秘错误的来源。要了解原因,请尝试将时区设置为 UTC+1 并打印 date(0)。结果将是 3:00。 @SamuelHapak - 呵呵。真的。另一方面,当然,我建议每个人始终将他们的时区设置为 UCT,因为当您的系统时钟遵守夏令时更改时本地时区会出现问题。 (为什么要将它设置为当地时间或 UCT 以外的任何时间?)【参考方案4】:

也许最简单的方法是:

gmdate('H:i:s', $your_time_in_seconds);

【讨论】:

如果时区不是 UTC,则无法工作。【参考方案5】:

$time 为秒数。

$seconds = $time % 60;
$time = ($time - $seconds) / 60;
$minutes = $time % 60;
$hours = ($time - $minutes) / 60;

现在小时、分钟和秒分别为$hours$minutes$seconds

【讨论】:

谢谢你;您如何将 $hours、$minutes、$seconds 的结果限制为仅获取整数?【参考方案6】:

另一种解决方案,它将为您提供传入秒值的天、小时、分钟和秒:

function seconds_to_time($secs)

    $dt = new DateTime('@' . $secs, new DateTimeZone('UTC'));
    return array('days'    => $dt->format('z'),
                 'hours'   => $dt->format('G'),
                 'minutes' => $dt->format('i'),
                 'seconds' => $dt->format('s'));


print_r(seconds_to_time($seconds_value);

如果预计时间超过一年,则“天”将需要额外的逻辑。使用str_pad() 或ltrim() 添加/删除前导零。

【讨论】:

【参考方案7】:

当您想使用此代码将秒数转换为时间格式时,ITroubs 的答案不会处理剩余的秒数,例如 hours : minutes : seconds

这是我为解决这个问题所做的: (这也将前导零添加到一位数的分钟和秒)

$seconds = 3921; //example

$hours = floor($seconds / 3600);
$mins = floor(($seconds - $hours*3600) / 60);
$s = $seconds - ($hours*3600 + $mins*60);

$mins = ($mins<10?"0".$mins:"".$mins);
$s = ($s<10?"0".$s:"".$s); 

$time = ($hours>0?$hours.":":"").$mins.":".$s;

在本例中,$time 将包含“1:05:21”。

【讨论】:

【参考方案8】:

如果您要对其进行硬编码,您将按照其他人的建议使用模数来提取时间。

如果您从 mysql 数据库中返回秒数,假设您的应用中不需要秒格式的数据,有一种更简洁的方法可以做到这一点,您可以使用 MySQL 的SEC_TO_TIME,它会返回时间采用 hh:mm:ss 格式。

例如。

SELECT SEC_TO_TIME(my_seconds_field) AS my_timestring;

【讨论】:

注意 SEC_TO_TIME 被限制在 838:59:59 (bugs.mysql.com/bug.php?id=29381)【参考方案9】:

对不起,这为时已晚,但也许有用

function mediaTimeDeFormater($seconds)

    if (!is_numeric($seconds))
        throw new Exception("Invalid Parameter Type!");


    $ret = "";

    $hours = (string )floor($seconds / 3600);
    $secs = (string )$seconds % 60;
    $mins = (string )floor(($seconds - ($hours * 3600)) / 60);

    if (strlen($hours) == 1)
        $hours = "0" . $hours;
    if (strlen($secs) == 1)
        $secs = "0" . $secs;
    if (strlen($mins) == 1)
        $mins = "0" . $mins;

    if ($hours == 0)
        $ret = "$mins:$secs";
    else
        $ret = "$hours:$mins:$secs";

    return $ret;


echo mediaTimeDeFormater(216.064000);//3:36

【讨论】:

【参考方案10】:

这样的?

if(is_numeric($time))
    $value = array(
        "years" => 0, "days" => 0, "hours" => 0,
        "minutes" => 0, "seconds" => 0,
    );
    if($time >= 31556926)
        $value["years"] = floor($time/31556926);
        $time = ($time%31556926);
    
    if($time >= 86400)
        $value["days"] = floor($time/86400);
        $time = ($time%86400);
    
    if($time >= 3600)
        $value["hours"] = floor($time/3600);
        $time = ($time%3600);
    
    if($time >= 60)
        $value["minutes"] = floor($time/60);
        $time = ($time%60);
    

    $value["seconds"] = floor($time);
    return (array) $value;
    
 else
    return (bool) FALSE;

来自:http://www.ckorp.net/sec2time.php

【讨论】:

天部分忽略夏令时,年份部分忽略闰年。【参考方案11】:

使用模数:

$hours = $time_in_seconds / 3600;
$minutes = ($time_in_seconds / 60) % 60;

【讨论】:

我不知道 .. 它给了我这个:2 = h,5.30 = m,当秒数为 9000(2 小时 + 30 分钟)【参考方案12】:

只是一个额外的小例子

请求的时间,以毫秒为单位

    // ms2time( (microtime(true) - ( time() - rand(0,1000000) ) ) );
    // return array
    function ms2time($ms)
        $return = array();
        // ms
        $return['ms'] = (int) number_format( ($ms - (int) $ms), 2, '', '');
        $seconds = (int) $ms;
        unset($ms);

        if ($seconds%60 > 0)
            $return['s'] = $seconds%60;
         else 
            $return['s'] = 0;
        

        if ( ($minutes = intval($seconds/60)))
            $return['m'] = $minutes;
        

        if (isset($return['m']))
            $return['h'] = intval($return['m'] / 60);
            $return['m']  = $return['m'] % 60; 
        


        if (isset($return['h']))
            $return['d'] = intval($return['h'] / 24);
            $return['h']  = $return['h'] % 24; 
        

        if (isset($return['d']))
            $return['mo'] = intval($return['d'] / 30);

        foreach($return as $k=>$v)
            if ($v == 0)
                unset($return[$k]);
        

        return $return;
    

    // ms2time2string( (microtime(true) - ( time() - rand(0,1000000) ) ) );
    // return array     
    function ms2time2string($ms)
        $array = array(
            'ms' => 'ms',
            's'  => 'seconds',
            'm'  => 'minutes',
            'h'  => 'hours',
            'd'  => 'days',
            'mo' => 'month',
        );


        if ( ( $return = ms2time($ms) )  && count($ms) > 0)

            foreach($return as $key=>$data)
                $return[$key] = $data .' '.$array[$key];
            

        
        return implode(" ", array_reverse($return));
    

【讨论】:

【参考方案13】:

这是另一种方式,所有这些都以“0”开头。

$secCount = 10000;
$hours = str_pad(floor($secCount / (60*60)), 2, '0', STR_PAD_LEFT);
$minutes = str_pad(floor(($secCount - $hours*60*60)/60), 2, '0', STR_PAD_LEFT);
$seconds = str_pad(floor($secCount - ($hours*60*60 + $minutes*60)), 2, '0', STR_PAD_LEFT);

改编自Flaxious的回答。

【讨论】:

【参考方案14】:

如果您想要好的格式,例如:0:00:00,请使用 str_pad() 作为@Gardner。

【讨论】:

【参考方案15】:

1 天 = 86400000 毫秒。

解码时间(毫秒/86400000,hr,min,sec,msec)

起来!我在 delphi 中思考,所有语言中都必须有类似的东西。

【讨论】:

在世界许多地方,至少有两天没有 86400 秒。

以上是关于如何将秒转换为时间格式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

c语言将秒数转换为时间格式(24小时制,00:00:00格式)

js 将秒数转换为时分秒的格式

php 将秒数转换为时间(年天小时分秒)

Javascript:如何将 exif 日期时间数据转换为时间戳? [复制]

Postgresql 在没有时区的情况下将秒转换为时间

PHP [PHP]将秒转换为时间(年,月,日,小时)