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
ответ @ Martin Bean совершенно правильный, но, на мой взгляд, он нуждается в некотором рефакторинге, чтобы соответствовать тому, что обычный пользователь ожидал бы от веб-сайта (веб-системы).
Я думаю, что когда минуты ниже 10 должен быть добавлен ведущий ноль.
например: 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
$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";
спасибо @Martin_Bean и @ Mihail Velikov отвечает. Я просто взял их фрагмент ответа и добавил некоторые изменения, чтобы проверить,
Если доступны только часы и пустое значение минут, то он будет отображать только часы.
то же самое, если доступны только минуты и часы пустые, то он будет отображать только минуты.
Если минут = 60, то он будет отображаться как 1 час. То же самое, если минута = 1, выход будет 1 минута.
изменения и правки приветствуются. Спасибо. Вот этот код.
функция 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; }`
Comments