【发布时间】:2011-02-10 21:55:08
【问题描述】:
我现在遇到了这个问题:给定一个月和一年,我需要知道它有多少工作日(即不包括周六和周日的天数)。
看起来很简单,但我很困惑。当然,我可以使用for 循环来解决它,并检查当天是周六还是周日,如果不增加计数器,但考虑到我很确定我可以得到这只是简单的愚蠢(和线性时间)去掉几个除法或模数。
对算法有任何想法吗?您可以随意使用 PHP 4.4.1 的所有功能。
编辑这是一个有效的for循环实现:
function weekdays_in_month($month, $year)
{
$days_in_month = days_in_month($month); // days_in_month defined somewhere
$first_day = date('w', mktime(0,0,0, $month, 1, $year));
$counter = 0;
for ($i = 0; $i < $days_in_month; $i++)
{
if (($first_day + $i + 1) % 7 >= 2)
$counter++;
}
return $counter;
}
【问题讨论】:
-
您希望它可以工作多久?如果您回溯到足够远以至于日历规则转换是一个问题,它会变得非常困难
-
@awoodland 是的,别担心。它需要从 2010 年左右开始工作。
-
days_in_month还需要$year作为输入(考虑闰年)。 -
@John at CashCommons 我有没有提到我讨厌与日期打交道?
-
是的,有很多小细节。我同意。