我正在尝试使用 PHP 计算给定日期范围内的工作日数(周一-周五)。如果用户输入开始日期 (2010-12-01) 和结束日期 (2010-12-24),该函数应输出该日期范围内的工作日数。
这是我发现的,但没有帮助..
function getworkingdays_time($STARTSTAMP, $ENDSTAMP){
$noofdays = ceil(($ENDSTAMP - $STARTSTAMP) / 86400);
$sundaycounter = 0;
$saturdaycounter = 0;
$holidaycounter = 0;
$offset = 0;
$holidaycounter = check_holiday_range($STARTSTAMP, $ENDSTAMP); // check holiday range
if(!defined("WORKSATURDAYS"))
{
define("WORKSATURDAYS", 0);
}
if(!defined("WORKSUNDAYS"))
{
define("WORKSUNDAYS", 0);
}
for ($i = 0; $i <= $noofdays; $i++){
$ts = $STARTSTAMP + ($i * 86400);
if (WORKSATURDAYS == '0' && date("l", $ts) == "Saturday"){
## they dont work saturdays
$saturdaycounter ++;
} elseif (WORKSUNDAYS == '0' && date("l", $ts) == "Sunday"){
## they dont work sundays
$sundaycounter ++;
}
}
$total = $holidaycounter + $saturdaycounter + $sundaycounter;
$offset = $total;
if ($total > 0){
$total = getworkingdays_time($ENDSTAMP + 86400, ($ENDSTAMP + ($total * 86400) + 86400));
$offset += $total;
}
unset($holidaycounter, $saturdaycounter, $sundaycounter, $i, $noofdays, $ts, $total);
return ($offset);
}
任何帮助将不胜感激。
非常感谢
聚苯乙烯
也许最简单的方法是将问题分为三个部分。假设“工作日”是周一到周五,则:
- 计算从现在到该范围内第一个星期一之间的工作日数。如果开始日期是星期一,则此步骤提供 0。
- Count 向后从结束日期到该范围内的最后一个星期一。如果结束日期是星期一,则此步骤提供 0。
- 确定第一个星期一和最后一个星期一之间的天数,除以 7,然后乘以 5。
将这三个步骤的结果相加,即可得到给定日期范围内的工作日总数。
对于假期,您最好计算该范围内的假期数并从总数中减去。
如果您在周六或周日工作,请调整前两步中的计数,并在确定该范围内有多少整周后,使用 5 以外的数字作为被乘数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)