【问题标题】:Convert number of minutes into hours & minutes using PHP使用 PHP 将分钟数转换为小时和分钟
【发布时间】:2012-01-23 17:07:16
【问题描述】:

我有一个名为 $final_time_saving 的变量,它只是几分钟,例如 250。

如何使用 PHP 以这种格式将该分钟数转换为小时和分钟:

4 hours 10 minutes

【问题讨论】:

  • 这个数字是分钟数吗? 250 分钟 != 4 小时 17 分钟
  • 不,但谷歌搜索 250 分钟的小时数返回 4.16666667 小时,所以也许这就是 Rob 得到这个数字的地方?

标签: php time


【解决方案1】:
<?php

function convertToHoursMins($time, $format = '%02d:%02d') {
    if ($time < 1) {
        return;
    }
    $hours = floor($time / 60);
    $minutes = ($time % 60);
    return sprintf($format, $hours, $minutes);
}

echo convertToHoursMins(250, '%02d hours %02d minutes'); // should output 4 hours 17 minutes

【讨论】:

  • 代码后面的评论很有趣..从问题中复制... 250分钟是4小时(240分钟)和10分钟,而不是17 :)
  • 确实如此。不知道我为什么写这个!留给后代:)
  • 如果它只返回 hours=0 时的分钟就好了。
  • @timpeterson 这很容易实现。
  • @MartinBean 谢谢我意识到这一点。我说的是在这个例子中添加代码。
【解决方案2】:
echo date('H:i', mktime(0,257));

【讨论】:

  • 最佳解决方案!另外,对于秒 => date('H\hi\m:s\s', mktime(0,0,$totalSeconds))
  • 错误的解决方案。不适用于 > 24 小时的时间,并且还取决于时区配置。这不是您正在使用的日期,请勿使用date 函数。
  • 它是 question 的解决方案,但你是对的,@deceze,它对于超过 24 小时的周期是不准确的。不过,我不明白这是如何依赖时区的。相当; gmmktime 将返回一个本地偏移时间。
  • 当您只需要转换一些整数并保持在 24 小时范围内时完美!
  • 这是一个误导性的解决方案,至少应该注意,这在 24 小时内不起作用。
【解决方案3】:
$hours = floor($final_time_saving / 60);
$minutes = $final_time_saving % 60;

【讨论】:

    【解决方案4】:

    您可以使用DateTime 扩展来实现这一点,这也适用于大于一天的分钟数 (&gt;= 1440):

    $minutes = 250;
    $zero    = new DateTime('@0');
    $offset  = new DateTime('@' . $minutes * 60);
    $diff    = $zero->diff($offset);
    echo $diff->format('%a Days, %h Hours, %i Minutes');
    

    demo

    【讨论】:

    • 如果你有像12.99这样的分钟数,这会中断
    • 十进制不是有效的分钟格式。问题是“使用 PHP 将分钟数转换为小时和分钟数”。
    【解决方案5】:

    @Martin Bean 的回答完全正确,但在我看来,它需要进行一些重构以适应普通用户对网站(网络系统)的期望。
    我认为当分钟数低于 10 时,必须添加前导零。
    例如:10:01,而不是 10:1

    我将代码更改为接受 $time = 0,因为 0:00 比 24:00 好。

    还有一件事——$time 不会大于 1439——即 23:59,而下一个值只是 0:00。

    function convertToHoursMins($time, $format = '%d:%s') {
        settype($time, 'integer');
        if ($time < 0 || $time >= 1440) {
            return;
        }
        $hours = floor($time/60);
        $minutes = $time%60;
        if ($minutes < 10) {
            $minutes = '0' . $minutes;
        }
        return sprintf($format, $hours, $minutes);
    }
    

    【讨论】:

    • 好点,我同意分钟需要前导零。另一种方法是使用 sprintf 的填充功能:echo sprintf('%02d', 2); // this echos "02"
    • 和分钟一样,我添加了几个小时,添加到数据库时特别重要,这样mysql就不会混淆
    • 返回值不一致,可能返回void,可能返回字符串
    【解决方案6】:
    $t = 250;
    $h = floor($t/60) ? floor($t/60) .' hours' : '';
    $m = $t%60 ? $t%60 .' minutes' : '';
    echo $h && $m ? $h.' and '.$m : $h.$m;
    

    4 小时 10 分钟

    【讨论】:

      【解决方案7】:

      很抱歉提出一个老话题,但我经常使用其中一个答案中的一些代码,今天我告诉自己我可以在不窃取某人代码的情况下做到这一点。我很惊讶这是多么容易。我想要的是 08:30 返回 510 分钟,所以这就是代码的作用。

      function tm($nm, $lZ = true){ //tm = to military (time), lZ = leading zero (if true it returns 510 as 08:30, if false 8:30
        $mins = $nm % 60;
        if($mins == 0)    $mins = "0$mins"; //adds a zero, so it doesn't return 08:0, but 08:00
      
        $hour = floor($nm / 60);
      
        if($lZ){
          if($hour < 10) return "0$hour:$mins";
        }
      
        return "$hour:$mins";
      }
      

      我使用短变量名是因为我会经常使用该函数,而且我很懒。

      【讨论】:

        【解决方案8】:

        最简单的方法是:

            gmdate('H:i', $numberOfSeconds * 60)
        

        【讨论】:

        • >>> gmdate('H:i', 9999 * 60) => "22:39" >>> gmdate('H:i', 99999 * 60) => "10: 39"
        【解决方案9】:

        以防万一您想要:

        echo date('G \h\o\u\r\s i \m\i\n\u\t\e\s', mktime(0, 90)); //will return 1 hours 30 minutes
        echo date('G \j\a\m i \m\e\n\i\t', mktime(0, 90)); //will return 1 jam 30 menit
        

        【讨论】:

          【解决方案10】:
          function hour_min($minutes){// Total
             if($minutes <= 0) return '00 Hours 00 Minutes';
          else    
             return sprintf("%02d",floor($minutes / 60)).' Hours '.sprintf("%02d",str_pad(($minutes % 60), 2, "0", STR_PAD_LEFT)). " Minutes";
          }
          echo hour_min(250); //Function Call will return value : 04 Hours 10 Minutes
          

          【讨论】:

          • 好主意,我接受了这个概念并在此基础上构建。感谢分享
          【解决方案11】:

          感谢@Martin_Bean 和@Mihail Velikov 的回答。我只是拿了他们的答案 sn-p 并添加了一些修改来检查,

          1. 如果只有 Hours only 可用而 minutes 值为空,那么它将只显示小时。

          2. 如果只有 Minutes 可用且 hours 值为空,则相同,那么它将仅显示分钟。

          3. 如果分钟 = 60,那么它将显示为 1 小时。同样,如果分钟 = 1,输出将是 1 分钟。

          欢迎更改和编辑。 谢谢。这是代码。

          function convertToHoursMins($time) {
                      
                      $hours    = floor($time / 60);
                      $minutes  = ($time % 60);
          
                  
                      if($minutes == 0){
          
                          if($hours == 1){
          
                              $output_format = '%02d hour ';
          
                          }else{
          
                              $output_format = '%02d hours ';
                          }
          
                          
                          $hoursToMinutes = sprintf($output_format, $hours);
          
                      }else if($hours == 0){
          
                          if ($minutes < 10) {
                                  $minutes = '0' . $minutes;
                          }
          
                          if($minutes == 1){
          
                              $output_format  = ' %02d minute ';
          
                          }else{
          
                              $output_format  = ' %02d minutes ';
                          }
                          
                          $hoursToMinutes = sprintf($output_format,  $minutes);
          
                      }else {
          
                          if($hours == 1){
          
                              $output_format = '%02d hour %02d minutes';
          
                          }else{
          
                              $output_format = '%02d hours %02d minutes';
                          }
                          
                          $hoursToMinutes = sprintf($output_format, $hours, $minutes);
                      }
                      
                      return $hoursToMinutes;
                  }
          

          【讨论】:

            【解决方案12】:
            $m = 250;
            
            $extraIntH = intval($m/60);
            
            $extraIntHs = ($m/60);             // float value   
            
            $whole = floor($extraIntHs);      //  return int value 1
            
            $fraction = $extraIntHs - $whole; // Total - int = . decimal value
            
            $extraIntHss =  ($fraction*60); 
            
            $TotalHoursAndMinutesString  =  $extraIntH."h ".$extraIntHss."m";
            

            【讨论】:

              【解决方案13】:

              查看此链接以获得更好的解决方案。 Click here

              How to convert hh:mm:ss to minutes

              $minutes=$item['time_diff'];
              $hours =   sprintf('%02d',intdiv($minutes, 60)) .':'. ( sprintf('%02d',$minutes % 60));
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-07-20
                • 2019-02-22
                • 1970-01-01
                • 1970-01-01
                • 2015-05-18
                • 1970-01-01
                • 1970-01-01
                • 2019-01-05
                相关资源
                最近更新 更多