Php 计算日期范围内的周天数
我试图使用PHP计算给定日期范围内的周天数(星期一星期五)。如果用户输入开始日期(2010-12-01)和结束日期(2010-12-24),则函数应显示该日期范围内的周天数 这是我发现的,但没用Php 计算日期范围内的周天数,php,Php,我试图使用PHP计算给定日期范围内的周天数(星期一星期五)。如果用户输入开始日期(2010-12-01)和结束日期(2010-12-24),则函数应显示该日期范围内的周天数 这是我发现的,但没用 function getworkingdays_time($STARTSTAMP, $ENDSTAMP){ $noofdays = ceil(($ENDSTAMP - $STARTSTAMP) / 86400); $sundaycounter = 0; $saturdaycount
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);
}
函数getworkingdays\u time($STARTSTAMP,$ENDSTAMP){
$noofdays=ceil($ENDSTAMP-$STARTSTAMP)/86400);
$sundaycounter=0;
$saturdaycounter=0;
$holidaycounter=0;
$offset=0;
$holidaycounter=检查假日范围($STARTSTAMP,$ENDSTAMP);//检查假日范围
如果(!已定义(“工作日”))
{
定义(“工作自然日”,0);
}
如果(!已定义(“工作平台”))
{
定义(“工作平台”,0);
}
对于($i=0;$i 0){
$total=getworkingdays_time($ENDSTAMP+86400,($ENDSTAMP+($total*86400)+86400));
$offset+=$total;
}
未设置($holidaycounter、$saturdaycounter、$sundaycounter、$i、$noofdays、$ts、$total);
回报(抵销);
}
任何帮助都将不胜感激。
谢谢你
PSi最简单的方法可能是将问题分为三部分。假设“周日”为周一至周五,则:
如果你在周六或周日工作,那么在前两个步骤中调整计数,并在确定该范围内的完整周数后,对被乘数使用5以外的数字。这是我提出的一个过于简单的算法。抱歉,它是用Python编写的,但我相信它可以适应其他语言。函数
(start,end)
的参数应该是时间元组
def find_work_days(start,end):
days = (end.tm_yday - start.tm_yday) + 1
weeks = days / 7
leftover = days % 7
if start.tm_wday + leftover == 6:
leftover -= 1
elif start.tm_wday + leftover > 6:
leftover -= 2
if start.tm_wday == 6: leftover += 1
work_days = weeks * 5 + leftover
return work_days
见此帖: