簡體   English   中英

如何在php中添加多個小時以擁有總小時數?

[英]How do I add multiple hours in php to have the total hours?

我正在開發一個超時和超時系統,僅編輯一些代碼。 錄制時間的格式為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";

方法的主要問題是,您將計算和時間格式混合在一起,這使您難以將計算與結果繼續進行。

我建議您嚴格將計算和顯示分開。 這樣,您可以先計算時間,然后以格式化的方式顯示時間。

通過閱讀代碼,我假設您已經掌握了每天的工作時間,以分鍾為單位,例如,像這樣的數組(為了便於解釋和便於閱讀,我們假設我們的月份只有7天):

$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 />";

如您所見,通過正確的計算和顯示分離, 您真正需要計算總小時數的唯一事情array_sum($minutes_stayed)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM