如何在php上获取当前日期的订单天数,周末已过?

rbl8hiat  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(77)

我试图制作一个百分比图表,显示当月当天有多少员工缺勤,而有多少员工没有缺勤(意味着没有记录到absent_table)(例如:今天,是2023年7月27日,这意味着我们在27个订单日)。我的算法是,首先我们需要知道到目前为止的最佳情况。因此,如果我有5名员工,那么5*27是总缺勤的最佳情况(这意味着所有员工都缺席并记录在absent_table中,这将是除数。其余的我可以处理)。我的问题是,如何确定什么订单号天到当天,如果周末被通过。例如,如果今天是2023年7月27日,则订购的日期必须是19,对吗?(周末对我来说是指周六和周日)
要得到当前的一天很容易,我只是做:

$current_day = date("d");

字符串
但是我必须减去它与周末的总数直到那个星期。现在是第四周了,所以:第一个月
所以公式就变成这样:

$ordered_day = (int)date("d") - $total_week; //I need to find this


希望你们能理解。谢谢。
编辑:这是最终的代码,感谢@Mpmp:

$total_weekdays = getWeekdaysBetweenDates(date("Y-m-01"), date("Y-m-d"));
$total_absent_best_case = $total_weekdays * $total_employee <-- of course, you fetch it from database

vawmfj5a

vawmfj5a1#

我不太明白

function getWeekdaysBetweenDates($date1, $date2, $holidays = [], $workDays = []) {
    $startDate = DateTime::createFromFormat('d-m-Y', $date1);
    $endDate = DateTime::createFromFormat('d-m-Y', $date2);
    $period = new DatePeriod(
        $startDate,
        new DateInterval('P1D'),
        $endDate->modify('+1 day')
    );

    $weekdays = 0;
    foreach ($period as $day) {
        $day_format = $day->format('d-m-Y');
        $in_holidays = in_array($day_format, $holidays);
        $in_work_days = in_array($day_format, $workDays);
        if (($day->format('N') < 6 && !$in_holidays) || $in_work_days) {
            $weekdays++;
        }
    }

    return $weekdays;
}

$date1 = '27-07-2023';
$date2 = '27-08-2023';
$holidays = ['28-07-2023']; // + 1 holiday
$workDays = ['30-07-2023']; // - 1 week day
$weekdaysBetweenDates = getWeekdaysBetweenDates($date1, $date2, $holidays, $workDays);
echo $weekdaysBetweenDates; // 22

字符串

相关问题