Преобразуйте количество минут в часы и минуты, используя PHP - PullRequest
61 голосов
/ 19 декабря 2011

У меня есть переменная с именем $final_time_saving, которая составляет всего несколько минут, например 250.

Как я могу преобразовать это количество минут в часы и минуты, используя PHP в следующем формате:

4 hours 10 minutes

Ответы [ 12 ]

109 голосов
/ 19 декабря 2011
<?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
93 голосов
/ 23 сентября 2013
echo date('H:i', mktime(0,257));
40 голосов
/ 19 декабря 2011
$hours = floor($final_time_saving / 60);
$minutes = $final_time_saving % 60;
11 голосов
/ 21 февраля 2014

Этого можно достичь с помощью расширения 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');

демо

9 голосов
/ 16 апреля 2013

@ Ответ Мартина Бина совершенно верный, но, на мой взгляд, он нуждается в некотором рефакторинге, чтобы соответствовать ожиданиям обычного пользователя от веб-сайта (веб-системы).
Я думаю, что когда минуты меньше 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);
}
4 голосов
/ 22 ноября 2016
$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 минут

4 голосов
/ 14 августа 2013

Извините, что поднял старую тему, но я часто использовал код из одного из этих ответов, и сегодня я сказал себе, что могу сделать это без кражи чьего-либо кода.Я был удивлен, насколько легко это было.То, что я хотел, чтобы 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";
}

Я использую короткие имена переменных, потому что собираюсь часто использовать функцию, и яленивый.

3 голосов
/ 30 декабря 2016

Самый простой способ:

    gmdate('H:i', $numberOfSeconds * 60)
1 голос
/ 31 марта 2018

Благодаря ответам @Martin_Bean и @Mikhail Velikov.Я просто взял их ответный фрагмент и добавил некоторые изменения для проверки:

  1. Если доступны только часы, а значение минут пустое, тогда будут отображаться только часы.

  2. То же самое, если доступны только минуты и значение часов пустое, тогда будут отображаться только минуты.

  3. Если минут = 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;
        }`
1 голос
/ 20 мая 2017

На всякий случай, если вы хотите что-то вроде:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...