Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中添加多个小时以获得总小时数?_Php - Fatal编程技术网

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

如何在php中添加多个小时以获得总小时数?,php,Php,我正在开发一个时间输入和时间输出系统,只是编辑一些代码。记录的时间格式为H:i:s。该系统允许用户在表格中查看他们在办公室的时间。在表格的第一行:我们有输入日期、输入时间、输出日期、输出时间以及员工在办公室的停留时间。例如,时间是从09:00:00到18:00:00。将显示的小时数是9.00小时,因为我使用十进制格式。如果是09:20:00至18:00:00,则其小时数也应为十进制。例如:8.70小时。差不多吧 现在,显示的表格是整个月的。在下表中,总小时数的格式为小时和分钟(例如77小时和6分

我正在开发一个时间输入和时间输出系统,只是编辑一些代码。记录的时间格式为H:i:s。该系统允许用户在表格中查看他们在办公室的时间。在表格的第一行:我们有输入日期、输入时间、输出日期、输出时间以及员工在办公室的停留时间。例如,时间是从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";

你的方法的主要问题是,你把时间的计算和格式混在了一起,这使得你很难用你的结果继续计算

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

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

对于您来说,使用您正在进行的任何类型的数据库查询创建类似的结构应该很容易

现在,您应该首先尝试将分钟格式化为您想要使用的时间跨度,如小时或十进制小时。存储单个时间跨度,如
$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 />";
$minutes\u staid=array(480500460503429,0,0);
foreach($minutes\u停留时间为$day=>$time)
{
$formatted=TimeCalculator::format($time);
echo TimeCalculator::以十进制形式打印($formatted[“decimal”])“equals”;
echo TimeCalculator::按h和min打印($formatted[“hours”],$formatted[“minutes”])。“
”; } $formatted_total=TimeCalculator::format(数组_sum($minutes_)); 回声“总计:”; echo TimeCalculator::打印为十进制($formatted_total[“decimal”])。“或”; echo TimeCalculator::按小时和分钟打印($formatted_total[“hours”],$formatted_total[“minutes”])。“
”;

如您所见,使用正确的Calculation和displayal分离,您实际需要计算总小时数的唯一事情是
数组求和($minutes\u staid)

添加分钟数,然后在显示时将其格式化为小时数和分钟数。没有你的代码,很难进一步帮助你。我添加了几个小时的代码。
$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 />";