NETWORKDAYS() “返回 start_date 和 end_date 之间的整个工作日数。工作日不包括周末和假日中标识的任何日期。使用 NETWORKDAYS 计算基于特定期限内工作天数的员工福利。 "根据 Excel 2007 帮助文件。
“介于”描述有点不准确,因为它包含了开始和结束日期,即 networkdays(21-01-2010. 22-01-2010) = 2。它也没有考虑时间。
这是 PHP 中的一个函数,它会给出相同的结果。如果结束日期小于开始日期,它就不能正常工作,也不会对假期做任何事情(见下面的函数)。
function networkdays($startdate, $enddate)
{
$start_array = getdate(strtotime($startdate));
$end_array = getdate(strtotime($enddate));
// Make appropriate Sundays
$start_sunday = mktime(0, 0, 0, $start_array[mon], $start_array[mday]+(7-$start_array[wday]),$start_array[year]);
$end_sunday = mktime(0, 0, 0, $end_array[mon], $end_array[mday]- $end_array[wday],$end_array[year]);
// Calculate days in the whole weeks
$week_diff = $end_sunday - $start_sunday;
$number_of_weeks = round($week_diff /604800); // 60 seconds * 60 minutes * 24 hours * 7 days = 1 week in seconds
$days_in_whole_weeks = $number_of_weeks * 5;
//Calculate extra days at start and end
//[wday] is 0 (Sunday) to 7 (Saturday)
$days_at_start = 6 - $start_array[wday];
$days_at_end = $end_array[wday];
$total_days = $days_in_whole_weeks + $days_at_start + $days_at_end;
return $total_days;
}
要考虑假期,您必须使用此函数计算天数,然后使用类似的查询
Select count (holiday_date) from holidays
where holiday_date between start_date and end_date
and DAYOFWEEK(holiday_date) not in (1,7)
请注意,将 end_date 视为 00:00(即早上的第一件事)没有问题 - 您可能必须将其设置为 23:59:59 才能正常工作。这完全取决于您的假期是如何存储的。
返回同一时间段的假期,然后从您首先想到的数字中减去。