从分钟数中获取年,月,日,分钟数

时间:2018-09-13 01:50:24

标签: php recursion

如何从给定的分钟数中获取蒙特,天和分钟的总数。假设以分钟为单位的值93366应该返回2 months ,5 days and 5 hours。这是我到目前为止尝试过的。

function convert_minutes($minutes, $output) {
    if ($minutes >= 43833) {
        $whole_month = 0;
        $decimal_month = 0;
        $label = "";
        $months = $minutes / 43833;
        list($whole_month, $decimal_month) = sscanf($months, '%d.%d');
        if ($months > 1) {
            $label = "months";
        } else {
            $label = "month";
        }
        $output .= $months . " " . $label;
        $decimal_month = "0." . $decimal_month;
        if ($decimal_month != 0) {
            return $this->convert_minutes($decimal_month, $output);
        } else {
            return $output;
        }
    } elseif ($minutes >= 1440) {
        $whole_day = 0;
        $decimal_day = 0;
        $label = "";
        $days = $minutes / 1440;
        list($whole_day, $decimal_day) = sscanf($days, '%d.%d');
        if ($days > 1) {
            $label = "days";
        } else {
            $label = "day";
        }
        $output .= $days . " " . $label;
        $decimal_day = "0." . $decimal_day;
        if ($decimal_day != 0) {
            return $this->convert_minutes($decimal_day, $output);
        } else {
            return $output;
        }
    } elseif ($minutes >= 60) {
        $whole_minutes = 0;
        $decimal_minutes = 0;
        $label = "";
        $min = $minutes / 60;

        list($whole_minutes, $decimal_minutes) = sscanf($min, '%d.%d');
        if ($min > 1) {
            $label = "minutes";
        } else {
            $label = "minute";
        }
        $output .= $min . " " . $label;
        $decimal_minutes = "0." . $decimal_minutes;
        if ($decimal_minutes != 0) {
            return $output . " and " . $decimal_minutes . " minutes";
        } else {
            return $output;
        }
    }
}

编辑

我只是想得到估计。假设1小时是60分钟,而1天是1440分钟,而1个月是43,200。我正在开发一个文档跟踪系统,只想根据收到的日期和发布的日期来计算文档在特定办公室停留的时间。

1 个答案:

答案 0 :(得分:1)

您可以使用floor和mod运算符。
地板将数字四舍五入。
如果平均分配,模运算符将为您提供剩余的内容。

示例5%2 = 1
由于2*2 = 4,其余为1。

Echo floor(93366/43200) . " months\n";
$rem = 93366%43200;
Echo floor($rem/1440) . " days\n";
$rem = $rem%1440;
Echo floor($rem/60) . " hours\n";
Echo $rem%60 . " minutes";

输出:

2 months
4 days
20 hours
6 minutes

https://3v4l.org/RreDY