关于php:如何将秒转换为时间格式?

How to convert seconds to time format?

本问题已经有最佳答案,请猛点这里访问。

由于某种原因,我转换时间格式,如:03:30 to seconds 3*3600 + 30*60, now。 我想把它转换回它的第一个(相同)格式。 怎么会这样?

我的尝试:

1
2
3
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?


这可能更简单

<5233>

PHP gmdate


1
2
3
$hours = floor($seconds / 3600);
$mins = floor($seconds / 60 % 60);
$secs = floor($seconds % 60);

如果你想获得时间格式:

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


如果你知道时间不到一个小时,你可以使用date()$date->format()函数。

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

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

如果它是一个小时或更长但不到一天,你可以输出几小时:分钟:秒格式与`

1
$hoursminsandsecs = date('H:i:s',$numberofsecs);

超过一天,您将需要使用模数来计算天数,因为这是该时期的开始日期将变得相关的地方。

希望有所帮助。


也许最简单的方法是:

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


$time为秒数。

1
2
3
4
$seconds = $time % 60;
$time = ($time - $seconds) / 60;
$minutes = $time % 60;
$hours = ($time - $minutes) / 60;

现在小时,分钟和秒分别在$hours$minutes$seconds中。


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

1
2
3
4
5
6
7
8
9
10
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()添加/删除前导零。


当您想要使用此代码将秒数转换为时间格式(如小时:分钟:秒)时,ITroubs的答案不会处理剩下的秒数

以下是我处理此问题的方法:
(这也增加了前导零到一位数分钟和秒)

1
2
3
4
5
6
7
8
9
10
$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"。


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

如果您从MySQL数据库返回秒数,假设您不需要在应用程序中以秒格式显示数据,则可以使用更简洁的方法,可以使用MySQL的SEC_TO_TIME,它将以hh:mm返回时间: ss格式。

例如。

1
SELECT SEC_TO_TIME(my_seconds_field) AS my_timestring;


对不起,这太晚了,但也许有用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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

这样的事情?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 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;

}其他{
return(bool)FALSE;
}

抓住了:http://www.ckorp.net/sec2time.php


这是另一种方法,对所有这些引导'0'。

1
2
3
4
$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答案的改编。


只是一个小例子

请求的时间以毫秒为单位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
    // 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));
    }

使用模数:

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


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


1天= 86400000毫秒。

DecodeTime(毫秒/ 86400000,小时,分钟,秒,毫秒)

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