it-swarm-pt.tech

Converta o número de minutos em horas e minutos usando PHP

Eu tenho uma variável chamada $final_time_saving que é apenas um número de minutos, 250 por exemplo.

Como posso converter esse número de minutos em horas e minutos usando PHP neste formato:

4 hours 10 minutes

60
Rob
<?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
107
Martin Bean
echo date('H:i', mktime(0,257));
90
Alastair
$hours = floor($final_time_saving / 60);
$minutes = $final_time_saving % 60;
39
Sjoerd

Você pode conseguir isso com a extensão DateTime , que também funcionará por um número de minutos maior que um dia (>= 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

11
Glavić

A resposta do @Martin Bean está perfeitamente correta, mas no meu ponto de vista ela precisa de alguma refatoração para se adequar ao que um usuário normal esperaria de um website (sistema web).
Acho que quando os minutos estão abaixo de 10, um zero inicial deve ser adicionado.
ex: 10:01, não 10: 1

Eu mudei o código para aceitar $time = 0 desde que 0:00 é melhor que 24:00.

Só mais uma coisa - não há caso em que $time é maior que 1439 - que é 23:59 e o próximo valor é simplesmente 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);
}
9
Mihail Velikov

Desculpem por trazer um tópico antigo, mas eu usei muito o código de uma dessas respostas, e hoje eu disse a mim mesmo que poderia fazer isso sem roubar o código de alguém. Fiquei surpreso com o quão fácil foi. O que eu queria é de 510 minutos para retornar às 08:30, então é isso que o código faz.

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

Eu uso nomes curtos de variáveis, porque vou usar muito a função e sou preguiçoso.

4
Lurvik
$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 horas e 10 minutos

3
Mike

A maneira mais fácil é:

    gmdate('H:i', $numberOfSeconds * 60)
2
Seif.ben

Apenas no caso de você querer algo como:

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
kelaskakap

Graças a @Martin_Bean e @Mihail Velikov responde. Eu peguei o snippet de resposta e adicionei algumas modificações para verificar

  1. Se apenas Horas disponíveis e minutos estiverem vazios, serão exibidas apenas as horas.

  2. Mesmo se apenas Minutos apenas disponível e valor de horas vazio, ele exibirá apenas alguns minutos.

  3. Se minutos = 60, então será exibido como 1 hora. O mesmo se minute = 1, a saída será 1 minuto.

Alterações e edições são bem-vindas. Obrigado. Aqui está o código.

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;
        }`
0
Rams
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
0
HIR
$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";
0
Omprakash Patel