使用 PHP 将分钟数转换为小时和分钟

Posted

技术标签:

【中文标题】使用 PHP 将分钟数转换为小时和分钟【英文标题】:Convert number of minutes into hours & minutes using PHP 【发布时间】:2012-01-23 17:07:16 【问题描述】:

我有一个名为 $final_time_saving 的变量,它只是几分钟,例如 250。

如何使用 php 以这种格式将该分钟数转换为小时和分钟:

4 hours 10 minutes

【问题讨论】:

这个数字是分钟数吗? 250 分钟 != 4 小时 17 分钟 不,但谷歌搜索 250 分钟的小时数返回 4.16666667 小时,所以也许这就是 Rob 得到这个数字的地方? Convert seconds to Hour:Minute:Second的可能重复 【参考方案1】:
<?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

【讨论】:

代码后面的评论很有趣..从问题中复制... 250分钟是4小时(240分钟)和10分钟,而不是17 :) 确实如此。不知道我为什么写这个!留给后代:) 如果它只返回 hours=0 时的分钟就好了。 @timpeterson 这很容易实现。 @MartinBean 谢谢我意识到这一点。我说的是在这个例子中添加代码。【参考方案2】:
echo date('H:i', mktime(0,257));

【讨论】:

最佳解决方案!另外,对于秒 => date('H\hi\m:s\s', mktime(0,0,$totalSeconds)) 错误的解决方案。不适用于 > 24 小时的时间,并且还取决于时区配置。这不是您正在使用的日期,请勿使用date 函数。 它是 question 的解决方案,但你是对的,@deceze,它对于超过 24 小时的周期是不准确的。不过,我不明白这是如何依赖时区的。相当; gmmktime 将返回一个本地偏移时间。 当您只需要转换一些整数并保持在 24 小时范围内时完美! 这是一个误导性的解决方案,至少应该注意,这在 24 小时内不起作用。【参考方案3】:
$hours = floor($final_time_saving / 60);
$minutes = $final_time_saving % 60;

【讨论】:

【参考方案4】:

您可以使用DateTime 扩展来实现这一点,这也适用于大于一天的分钟数 (&gt;= 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

【讨论】:

如果你有像12.99这样的分钟数,这会中断 十进制不是有效的分钟格式。问题是“使用 PHP 将分钟数转换为小时和分钟数”。【参考方案5】:

@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);

【讨论】:

好点,我同意分钟需要前导零。另一种方法是使用 sprintf 的填充功能:echo sprintf('%02d', 2); // this echos "02" 和分钟一样,我添加了几个小时,添加到数据库时特别重要,这样mysql就不会混淆 返回值不一致,可能返回void,可能返回字符串【参考方案6】:
$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 分钟

【讨论】:

【参考方案7】:

很抱歉提出一个老话题,但我经常使用其中一个答案中的一些代码,今天我告诉自己我可以在不窃取某人代码的情况下做到这一点。我很惊讶这是多么容易。我想要的是 08:30 返回 510 分钟,所以这就是代码的作用。

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

我使用短变量名是因为我会经常使用该函数,而且我很懒。

【讨论】:

【参考方案8】:

最简单的方法是:

    gmdate('H:i', $numberOfSeconds * 60)

【讨论】:

>>> gmdate('H:i', 9999 * 60) => "22:39" >>> gmdate('H:i', 99999 * 60) => "10: 39"【参考方案9】:

以防万一您想要:

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

【讨论】:

【参考方案10】:
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

【讨论】:

好主意,我接受了这个概念并在此基础上构建。感谢分享【参考方案11】:

感谢@Martin_Bean 和@Mihail Velikov 的回答。我只是拿了他们的答案 sn-p 并添加了一些修改来检查,

    如果只有 Hours only 可用而 minutes 值为空,那么它将只显示小时。

    如果只有 Minutes 可用且 hours 值为空,则相同,那么它将仅显示分钟。

    如果分钟 = 60,那么它将显示为 1 小时。同样,如果分钟 = 1,输出将是 1 分钟。

欢迎更改和编辑。 谢谢。这是代码。

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

【讨论】:

【参考方案12】:
$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";

【讨论】:

【参考方案13】:

查看此链接以获得更好的解决方案。 Click here

How to convert hh:mm:ss to minutes

$minutes=$item['time_diff'];
$hours =   sprintf('%02d',intdiv($minutes, 60)) .':'. ( sprintf('%02d',$minutes % 60));

【讨论】:

以上是关于使用 PHP 将分钟数转换为小时和分钟的主要内容,如果未能解决你的问题,请参考以下文章

PHP将DATETIME转换为时间前函数,秒,分钟,小时,天等[重复]

Python实现ParseDuration-支持解析字符串格式的时间单位,例如将小时或者分钟数转换为秒

将天、小时、分钟和秒转换为整数

微时间到秒或小时或分钟的转换[重复]

php 将时间戳转换为秒(2 小时 12 分钟或 2:12:00)

有没有办法强制将单个数字Int转换为两位数的int值?