使用PHP将分钟数转换为小时和分钟


72

我有一个称为$final_time_saving分钟的变量,例如250分钟。

如何使用以下格式的PHP将分钟数转换为小时数和分钟数:

4 hours 10 minutes


这是分钟数吗?250min!= 4h 17min
Eugen Rieck

2
否,但是Google搜寻250分钟以内的小时会返回4.16666667小时,所以也许那是Rob从中得到数据的地方?
Martin Bean

Answers:


136
<?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

10
代码后的注释很有趣。.从问题中复制出来... 250分钟是4个小时(240分钟)和10分钟,不是17 :)
mavrosxristoforos

7
确实是。不知道为什么我写了!留给后代:)
Martin Bean

1
如果仅在hours = 0时返回分钟,那将是很好的。
蒂姆·彼得森2014年

@timpeterson这很容易实现。
Martin Bean

@MartinBean谢谢,我意识到了这一点。我在谈论将代码添加到此示例中。
蒂姆·彼得森2014年

113
echo date('H:i', mktime(0,257));

2
最好的解决方案!同样,秒=> date('H \ hi \ m:s \ s',mktime(0,0,$ totalSeconds))
mwm

19
错误的解决方案。超过24小时不工作,并且还取决于时区配置。这不是您正在使用的日期,请不要使用date函数。
deceze

这是一个解决问题的方法,但您是正确的@deceze,它的周期超过24h并不准确。不过,我看不出这与时区如何相关。而是 gmmktime将返回本地偏移时间。
Alastair 2014年

5
当您只需要转换一些整数并且停留在24小时范围内时,它就是完美的选择!
大安2014年

4
这是一个误导性的解决方案,至少应注意,该解决方案在超过24小时内都不会起作用。
工具

45
$hours = floor($final_time_saving / 60);
$minutes = $final_time_saving % 60;

2
这实际上是最好的解决方案。不涉及任何日期函数
Imtiaz

12

您可以通过DateTime扩展实现此目标,该扩展名也可以在大于一天(>= 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
Ray

9

@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);
}

3
好点,我同意会议记录需要前置零。您可以做的另一种方式是使用sprintf的填充功能:echo sprintf('%02d', 2); // this echos "02"
Dave Hollingworth 2013年

与分钟相同,我将它添加了几个小时,特别是在添加到数据库时特别重要,这样mysql不会感到困惑
Dvid Silva 2013年

返回值不一致,可能返回void,可能返回字符串
Erlang P

7
$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分钟


5

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

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";
}

我使用短变量名,因为我将大量使用该函数,而且我很懒。


3

最简单的方法是:

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

>>> gmdate('H:i',9999 * 60)=>“ 22:39” >>> gmdate('H:i',99999 * 60)=>“ 10:39”
Erlang P

2

以防万一您想要以下内容:

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

1
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

好主意,我接受了这个概念,并在此基础上进行了构建。感谢您的分享
user670265

1

感谢@Martin_Bean和@Mihail Velikov的答案。我只是拿了他们的答案片段,并添加了一些修改以进行检查,

  1. 如果仅“仅小时”可用且“分钟”值为空,则它将仅显示小时。

  2. 如果仅“分钟”可用且小时值为空,则相同,则仅显示分钟。

  3. 如果分钟= 60,则它将显示为1小时。如果分钟= 1,则相同,输出将为1分钟。

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

函数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;
        }`

0
$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";

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.