我正在尝试将7500秒转换为分钟,然后将分钟转换为数小时。如果它出现在2小时5分钟,如本例所示,我想将其显示为“2小时5分钟”。如果它连续2个小时,我只想让它显示“2小时”。
7500除以60除以60得出2.083(重复3次)。 为什么%返回0?如何确定其完整时间,或者是否有分钟显示?
die("Test: " . ((7500 / 60) / 60) % 1);
答案 0 :(得分:3)
对于转换,您可以使用:
function secondsToWords($seconds)
{
/*** return value ***/
$ret = "";
/*** get the hours ***/
$hours = intval(intval($seconds) / 3600);
if($hours > 0)
{
$ret .= "$hours hours ";
}
/*** get the minutes ***/
$minutes = bcmod((intval($seconds) / 60),60);
if($hours > 0 || $minutes > 0)
{
$ret .= "$minutes minutes ";
}
/*** get the seconds ***/
$seconds = bcmod(intval($seconds),60);
$ret .= "$seconds seconds";
return $ret;
}
echo secondsToWords(7500);
答案 1 :(得分:0)
因为那是模数运算符,它给出了除法的余数。
您希望使用返回浮点数的除法运算符/
。见here
答案 2 :(得分:0)
我刚才创造了一个不错的功能。如果你愿意的话,它也需要数年和数月(以及你想要的任何东西)。
来源+示例:http://hotblocks.nl/tests/time_ago.php
功能:
<?php
function time_ago( $f_seconds, $f_size = 2, $f_factor = 1.6 ) {
$units = array(
86400*365.25 => array(' year', ' years'),
86400*30 => array(' month', ' months'),
86400*7 => array(' week', ' weeks'),
86400 => array(' day', ' days'),
3600 => array(' hour', ' hours'),
60 => array(' minute', ' minutes'),
1 => array(' second', ' seconds'),
);
if ( isset($GLOBALS['g_units']) && is_array($GLOBALS['g_units']) ) {
$units = $GLOBALS['g_units'];
}
$timeAgo = array();
$seconds = (int)$f_seconds;
foreach ( $units AS $range => $unit ) {
if ( 1 == $range || $seconds >= $range * $f_factor ) {
is_array($unit) || $unit = array($unit, $unit);
$last = count($timeAgo) == $f_size-1;
$round = $last ? 'round' : 'floor';
$num = $round($seconds / $range);
$timeAgo[] = $num . $unit[(int)(1 != $num)];
if ( $last ) {
break;
}
$seconds -= $num * $range;
}
}
$separator = isset($GLOBALS['g_separator']) ? $GLOBALS['g_separator'] : ', ';
return implode($separator, $timeAgo);
}
?>
答案 3 :(得分:-1)
这就是mod(%)运算符的工作方式。每个整数都可以被1整除,所以 n%1 = 0
表示所有积分n。
你想用%运算符做什么?
无论是什么,您可能希望将其应用于整数值,例如秒数。它不适用于非整数值;在应用运算符之前,它们将被提升为int值。