使用 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
扩展来实现这一点,这也适用于大于一天的分钟数 (>= 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-支持解析字符串格式的时间单位,例如将小时或者分钟数转换为秒