第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用多維數(shù)組以及重疊檢查來(lái)獲取從開(kāi)始時(shí)間到結(jié)束時(shí)間的總小時(shí)數(shù)?

如何使用多維數(shù)組以及重疊檢查來(lái)獲取從開(kāi)始時(shí)間到結(jié)束時(shí)間的總小時(shí)數(shù)?

PHP
湖上湖 2023-08-19 16:16:26
我有一個(gè)以下場(chǎng)景,我需要僅檢查特定日期數(shù)組內(nèi)的重疊并獲取總出勤時(shí)間。array (  '2020-07-14' =>   array (    'total_attended_hours' => 0,    0 =>     array (      'start_time' => '09:00:00',      'end_time' => '13:00:00',      'hours' => '4 hours 0 mins',    ),    1 =>     array (      'start_time' => '13:30:00',      'end_time' => '16:30:00',      'hours' => '3 hours 0 mins',    ),    2 =>     array (      'start_time' => '09:00:00',      'end_time' => '14:00:00',      'hours' => '5 hours 0 mins',    ),  ),  '2020-07-15' =>   array (    'total_attended_hours' => 0,    0 =>     array (      'start_time' => '13:30:00',      'end_time' => '17:00:00',      'hours' => '3 hours 30 mins',    ),    1 =>     array (      'start_time' => '09:00:00',      'end_time' => '14:00:00',      'hours' => '5 hours 0 mins',    ),  ),)如上面的日期示例所示,2020-07-14我們的start_time and end_time:- 總出席時(shí)間為should be equals to7 小時(shí) 30 分鐘``接下來(lái)2020-07-15應(yīng)該是total_attended_hours=8 hours 0 mins操場(chǎng)以下數(shù)組的新問(wèn)題$data = [  '2020-07-14' =>   [    [      'start_time' => '14:15:00',      'end_time' => '17:45:00',    ],[      'start_time' => '14:30:00',      'end_time' => '17:30:00',    ],[      'start_time' => '14:30:00',      'end_time' => '17:30:00',    ],  ],  '2020-07-15' => [    [      'start_time' => '13:30:00',      'end_time' => '17:00:00',    ],[      'start_time' => '09:00:00',      'end_time' => '14:00:00',    ],  ],];結(jié)果 :-Array(    [2020-07-14] => Array        (            [0] => Array                (                    [start_time] => 14:15:00                    [end_time] => 17:45:00                )            [1] => Array                (                    [start_time] => 14:30:00                    [end_time] => 17:30:00                )            [2] => Array                (                    [start_time] => 14:30:00                    [end_time] => 17:30:00                )            [total_attended_hours] => 03:15:00        )[total_attended_hours] => 03:15:00應(yīng)該在哪里[total_attended_hours] => 03:30:00
查看完整描述

1 回答

?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊

這里你得到了算法:

  1. 對(duì)于每組時(shí)間預(yù)訂,執(zhí)行以下操作

  2. 找到最小的start_time

  3. 將和duration之間添加到start_timeend_timesum

  4. 查找下一個(gè)最小的時(shí)間預(yù)訂start_time

  5. IF current_end_time<previous_end_time跳轉(zhuǎn)到 4 END IF

  6. IF start_time<previous_end_time減去sumEND IF的差值

  7. 在和duration之間添加start_timeend_time

  8. 跳到4,直到?jīng)]有匹配的元素為止。

快樂(lè)編碼:)

編輯 - 添加更干凈的實(shí)現(xiàn)

function getSortedDays(array $days): array {

    return array_map(function (array $day) {

       array_multisort(array_column($day, 'start_time'), SORT_ASC, $day);

       

       return $day;

    }, $days);

}


function addTotalAttendedHours(array $days): array {

    $sortedDays = getSortedDays($days);

    

    $days = array_map(function (array $day) {

        $sum = (new DateTime())->setTimestamp(0);

        $previousEnd = null;

        

        foreach ($day as $time) {

            $currentStart = new DateTimeImmutable($time['start_time']);

            $currentEnd = new DateTimeImmutable($time['end_time']);


            if ($currentEnd < $previousEnd) continue; // this has been added

            

            $sum->add($currentStart->diff($currentEnd));

            

            if ($previousEnd !== null && $currentStart < $previousEnd) {

                $sum->sub($currentStart->diff($previousEnd));

            }

            

            $previousEnd = $currentEnd;

        }

        

        $attendedSeconds = $sum->getTimestamp();

        $day['total_attended_hours'] = sprintf(

            '%02u:%02u:%02u',

            $attendedSeconds / 60 / 60,

            ($attendedSeconds / 60) % 60,

            $attendedSeconds % 60

        );

        

        return $day;

    }, $sortedDays);

    

    return $days;

}

工作示例。



查看完整回答
反對(duì) 回復(fù) 2023-08-19
  • 1 回答
  • 0 關(guān)注
  • 129 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)