web-dev-qa-db-fra.com

Convertissez le nombre de minutes en heures et minutes en utilisant PHP

J'ai une variable appelée $final_time_saving qui ne représente qu'un nombre de minutes, 250 par exemple.

Comment puis-je convertir ce nombre de minutes en heures et minutes en utilisant PHP dans ce format:

4 hours 10 minutes

62
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
111
Martin Bean
echo date('H:i', mktime(0,257));
95
Alastair
$hours = floor($final_time_saving / 60);
$minutes = $final_time_saving % 60;
40
Sjoerd

Vous pouvez y parvenir avec DateTime extension, qui fonctionnera également pendant un nombre de minutes supérieur à un jour (>= 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ć

La réponse de @Martin Bean est tout à fait correcte, mais à mon avis, elle nécessite une refactorisation adaptée à ce qu'un utilisateur normal attend d'un site Web (système Web).
Je pense que lorsque les minutes sont inférieures à 10, il faut ajouter un zéro non significatif.
ex: 10:01, pas 10: 1

J'ai changé de code pour accepter $time = 0 depuis 0:00 vaut mieux que 24:00.

Une dernière chose - il n’ya pas de cas où $time est supérieur à 1439 - ce qui correspond à 23h59 et la valeur suivante correspond simplement à 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
$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 heures et 10 minutes

5
Mike

Désolé d’avoir abordé un vieux sujet, mais j’ai beaucoup utilisé le code de l’une de ces réponses, et aujourd’hui je me suis dit que je pouvais le faire sans voler le code de quelqu'un. J'ai été surpris à quel point c'était facile. Ce que je voulais, c’est 510 minutes pour que nous revenions à 08h30, c’est donc ce que fait le code.

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

J'utilise des noms de variables courts parce que je vais beaucoup utiliser la fonction et je suis paresseux.

4
Lurvik

Le moyen le plus simple est:

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

Merci à @Martin_Bean et @Mihail Velikov pour leurs réponses. Je viens de prendre leur extrait de réponse et ajouté quelques modifications pour vérifier,

  1. Si seules les heures disponibles et la valeur minutes sont vides, seules les heures sont affichées.

  2. Idem si seules les minutes seulement sont disponibles et que la valeur des heures est vide, seules les minutes seront affichées.

  3. Si minutes = 60, alors cela affichera 1 heure. Idem si minute = 1, la sortie sera de 1 minute.

Les modifications et modifications sont les bienvenues. Merci. Voici le code.

fonction 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;
        }`
1
Rams

Juste au cas où vous voudriez quelque chose comme:

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