У меня есть переменная с именем $final_time_saving
, которая составляет всего несколько минут, например 250.
Как я могу преобразовать это количество минут в часы и минуты с помощью PHP в этом формате:
4 hours 10 minutes
У меня есть переменная с именем $final_time_saving
, которая составляет всего несколько минут, например 250.
Как я могу преобразовать это количество минут в часы и минуты с помощью PHP в этом формате:
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;
@Martin Bean ответ совершенно верный, но, на мой взгляд, ему нужен какой-то рефакторинг, подходящий для обычного пользователя, которого можно ожидать от веб-сайта (веб-системы).
Я думаю, что, когда минуты ниже 10, должен быть добавлен ведущий ноль.
ex: 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);
}
Это можно сделать с помощью расширения 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');
Извините за то, что вы подняли старую тему, но я много использовал код из одного из этих ответов, и сегодня я сказал себе, что могу сделать это, не украв код. Я был удивлен, насколько это было легко. То, что я хотел, - 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";
}
Я использую короткие имена переменных, потому что я много использую эту функцию, и я ленив.
$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 минут
На всякий случай вы хотите что-то вроде:
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
Самый простой способ:
gmdate('H:i', $numberOfSeconds * 60)