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
<?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
echo date('H:i', mktime(0,257));
$hours = floor($final_time_saving / 60);
$minutes = $final_time_saving % 60;
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');
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);
}
$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
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.
Le moyen le plus simple est:
gmdate('H:i', $numberOfSeconds * 60)
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,
Si seules les heures disponibles et la valeur minutes sont vides, seules les heures sont affichées.
Idem si seules les minutes seulement sont disponibles et que la valeur des heures est vide, seules les minutes seront affichées.
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;
}`
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
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
$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";