如何在php中添加多个小时以获得总小时数?

时间:2016-02-03 02:09:17

标签: php

我正在制作一个进出时间系统,只是编辑一些代码。记录时间的格式为H:i:s。该系统允许用户在桌子中查看他们在办公室的时间。在表格中,第一行:我们有Date-In,Time-In,Date-Out,Time-Out和员工留在办公室的小时数。例如,时间是从09:00:00到18:00:00,显示的小时是9.00小时,因为我是以十进制格式制作的。如果它的09:20:00到18:00:00它的小时数也应该是十进制的。例如:8.70小时。这样的事情。

现在,正在显示的表是整个月。在表格下方,总小时数的格式为小时和分钟(例如,77小时和6分钟)以及小数(77.10小时)。 如何计算总小时数?

下面的代码是小时的计算。获取时间和时间。

$n = $totalMins/60;
$whole = floor($n);      // 1
$fraction = $n - $whole;

$totalHrs += $whole;
$totalMins = round($fraction*60);
$totalMins = sprintf("%02d", $totalMins);

$elapsedDeci = round($fraction, 2);
$elapsedDeci += $totalHrs;
$elapsedDeci = number_format($elapsedDeci, 2);
$elapsed = "$elapsedDeci";

1 个答案:

答案 0 :(得分:0)

您的方法的主要问题是,您混合了计算和时间格式,这使您难以使用结果进行计算。

我建议你严格分开计算和展示。这样,您可以先计算时间,然后以格式化方式显示它们。

通过阅读你的代码,我假设你已经拥有了每天的工作时间,例如在这样的数组中(为了解释和可读性,让我们假装我们的月份是只有七天):

$minutes_stayed = array(480, 500, 460, 503, 429, 0, 0);

使用任何类型的数据库查询创建一些类似的结构应该很容易。

现在,您应该首先尝试将分钟格式化为您想要使用的时间跨度,例如小时或小数小时。存储单个时间跨度,如$minutes = 480;,并执行一些数学魔法。请注意,我还没有进行任何字符串格式化:

$formatted = array();

$formatted["hours"]   = floor($minutes/60);
$formatted["minutes"] = $minutes - $formatted["hours"]*60;
$formatted["decimal"] = $formatted["hours"] + $formatted["minutes"]/60;
在你这样做之后,你可以自由地做任何你想做的事。总和/减去/打印/扔掉/ ......可能性是无穷无尽的。

看看下面的课程。它基本上是对现有代码的推导,但是严格分离计算和置换:

class TimeCalculator 
{
    public static function print_as_decimal( $decimal )
    {
        echo number_format($decimal, 2, '.', '')." hours";
    }

    public static function print_as_h_and_min( $hours, $minutes )
    {
        echo $hours." hours and ".$minutes." minutes";
    }

    public static function format( $minutes )
    {
        $formatted = array();

        $formatted["hours"]   = floor($minutes/60);
        $formatted["minutes"] = $minutes - $formatted["hours"]*60;
        $formatted["decimal"] = $formatted["hours"] + $formatted["minutes"]/60;

        return $formatted;
    }
}

要弄清楚每项功能的作用应该不难。使用本课程,您可以轻松完成所需的一切。试试这段代码:

$minutes_stayed = array(480, 500, 460, 503, 429, 0, 0);

foreach($minutes_stayed as $day => $time)
{
    $formatted = TimeCalculator::format($time);
    echo TimeCalculator::print_as_decimal($formatted["decimal"])." equals ";
    echo TimeCalculator::print_as_h_and_min($formatted["hours"], $formatted["minutes"])."<br />";
}

$formatted_total = TimeCalculator::format(array_sum($minutes_stayed));
echo "Total: ";
echo TimeCalculator::print_as_decimal($formatted_total["decimal"])." or ";
echo TimeCalculator::print_as_h_and_min($formatted_total["hours"], $formatted_total["minutes"])."<br />";

正如您所看到的,通过计算器和displayal的正确分离,您实际需要计算总小时数的唯一方法是array_sum($minutes_stayed)