使用百分号运算符时遇到问题(%)(PHP)

时间:2011-12-28 16:58:21

标签: php operators

我正在尝试将7500秒转换为分钟,然后将分钟转换为数小时。如果它出现在2小时5分钟,如本例所示,我想将其显示为“2小时5分钟”。如果它连续2个小时,我只想让它显示“2小时”。

7500除以60除以60得出2.083(重复3次)。 为什么%返回0?如何确定其完整时间,或者是否有分钟显示?

die("Test: " . ((7500 / 60) / 60) % 1);

4 个答案:

答案 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值。