关于时间:使用PHP将分钟数转换为小时和分钟

Convert number of minutes into hours & minutes using PHP

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

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

4 hours 10 minutes


1
2
3
4
5
6
7
8
9
10
11
12
<?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


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


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


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

1
2
3
4
5
$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


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

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

还有一件事 - 当$time大于1439时没有任何情况 - 这是23:59而下一个值只是0:00。

1
2
3
4
5
6
7
8
9
10
11
12
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);
}


1
2
3
4
$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分钟


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

1
2
3
4
5
6
7
8
9
10
11
12
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";
}

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


最简单的方法是:

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

感谢@Martin_Bean和@Mihail Velikov的回答。我刚刚拿了他们的答案片段并添加了一些修改来检查,

  • 如果只有小时可用且分钟值为空,则它将仅显示小时数。

  • 如果仅"分钟"可用且小时值为空,则相同,则仅显示分钟。

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

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

    function convertToHoursMins($ time){

    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
                $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;
            }`

    以防你想要的东西:

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $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";


    1
    2
    3
    4
    5
    6
    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