【问题标题】: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?

【问题讨论】:

    标签: php time format


    【解决方案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;
        

        【讨论】:

        【解决方案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 秒。
                猜你喜欢
                • 1970-01-01
                • 2021-01-28
                • 2019-07-04
                • 2013-08-27
                • 2014-01-29
                • 2014-12-02
                • 2021-08-07
                • 2018-09-29
                • 1970-01-01
                相关资源
                最近更新 更多