亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

yii2 如何計算日期之間的天數,不包括周末和節假日

yii2 如何計算日期之間的天數,不包括周末和節假日

PHP
斯蒂芬大帝 2022-07-16 18:26:36
好的,首先,在你們中的一些人可能把這個問題變成一個重復的問題之前。我經歷了許多與我的問題相關的問題。但似乎這些問題無法解決我的問題。我想查找 2 個日期之間的天數,不包括周末和節假日。我經歷過的問題聲明了數組中的變量$holiday并初始化該數組中的值。以下是我的代碼,LeaveapplicationController.php用于查找不包括周末的日期$date1 = $model->startDate;        $date2 = $model->endDate;        $date1 = strtotime($date1);        $date2 = strtotime($date2);        //Initialized public holiday        $holidays = array("2020-01-21", "2020-01-22", "2020-01-23");        $days = ($date2 - $date1)/86400 + 1;        $fullWeek = floor($days/7);        $remainDay = fmod($days,7);        $firstDay = date("N", $date1);        $lastDay = date("N", $date2);        if($firstDay <= $lastDay){            if($firstDay <= 6 && 6 <= $lastDay) $remainDay--;            if($firstDay <= 7 && 7 <= $lastDay) $remainDay--;        }        else         {            if($firstDay == 7){                $remainDay--;                if($lastDay == 6){                    $remainDay--;                }            }            else{                $remainDay -= 2;            }        }        $workDay = $fullWeek * 5;        if($remainDay > 0)        {            $workDay += $remainDay;        }        foreach($holidays as $holiday){            $timeStamp = strtotime($holiday);            if($date1 <= $timeStamp && $timeStamp <= $date2 && date("N", $timeStamp) != 6 && date("N", $timeStamp) != 7)            $workDay--;        }        $model->no_of_days=$workDay;        $model->save();所以,我嘗試過使用一些值初始化的假期。就我而言,我想$holiday=array()用另一個數據庫表中的數據替換它。有沒有最好的方法呢?
查看完整描述

1 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

使用DateTime


$start = new \DateTime($model->startDate); //2020-01-01

$end = new \DateTime($model->endDate); //2020-01-31

$endDate = $end->format('Y-m-d');

$interval = new \DateInterval('P1D');

$end->add($interval);

$period = new \DatePeriod($start, $interval, $end);


foreach ($period as $date) {

    $allDates[] = [

        'date' => $date->format('Y-m-d'),

        'dayNo' => $date->format('N'),

    ];

}


//Initialized public holiday

 $holidays = HolidayModelName::find()

    ->select('date')

    ->where(['between', 'date', $start->format('Y-m-d'), $endDate])

    ->indexBy('date')

    ->column();


$workDay = 0;


foreach ($allDates as $value) {

    $isWeekOff = $value['dayNo'] == 6 || $value['dayNo'] == 7;


    if (!$isWeekOff && !isset($holidays[$value['date']])) {

        $workDay++;

    }

}


// Result : 20 Work Days


查看完整回答
反對 回復 2022-07-16
  • 1 回答
  • 0 關注
  • 144 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號