可能重复:
获取给定月份的工作日数
如何计算任何一个月的工作日?cal_days_in_month
简单地返回一个月中的总天数。我的任务是计算一个月中除了周六、周日或周日之外的天数。有什么方法可以找到这个吗?
function countDays($year, $month, $ignore) {
$count = 0;
$counter = mktime(0, 0, 0, $month, 1, $year);
while (date("n", $counter) == $month) {
if (in_array(date("w", $counter), $ignore) == false) {
$count++;
}
$counter = strtotime("+1 day", $counter);
}
return $count;
}
echo countDays(2013, 1, array(0, 6)); // 23
本例中使用了date
函数。关于忽略参数的注意事项:0是星期日。。。,6点是星期六。
从中复制第二个答案:获取给定月份的工作日数
你不需要计算一个月里的每一天。你已经知道前28天包含20个工作日。你所要做的是确定最后几天。将起始值更改为29。然后添加20个工作日的回报价值。
function get_weekdays($m,$y) {
$lastday = date("t",mktime(0,0,0,$m,1,$y));
$weekdays=0;
for($d=29;$d<=$lastday;$d++) {
$wd = date("w",mktime(0,0,0,$m,$d,$y));
if($wd > 0 && $wd < 6) $weekdays++;
}
return $weekdays+20;
}
这应该能解决你的问题,而且确实是一个有效的解决方案。
一个简单(不那么优雅(的答案就是创建一个月第一天的时间戳,使用date((获取月的物理名称,然后切换或是否切换以确定是否是工作日。
$myTime = strtotime("1/1/2013"); // Use whatever date format you want
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, 1, 2013); // 31
$workDays = 0;
while($daysInMonth > 0)
{
$day = date("D", $myTime); // Sun - Sat
if($day != "Sun" && $day != "Sat")
$workDays++;
$daysInMonth--;
$myTime += 86400; // 86,400 seconds = 24 hrs.
}
echo "There are $workDays work days this month!";
输出
There are 23 work days this month!
http://php.net/manual/en/function.strtotime.php
http://php.net/manual/en/function.date.php
伙计,只需在谷歌上搜索一下。
为了子孙后代,您的算法:
- 使用date((获取一个月中的天数
- 从第(1(天开始,使用mktime/gmmktime创建epoch时间戳,然后使用date((来确定它代表的是一周中的哪一天
- 重复,直到找到第一个工作日(星期一(。让这是"我">
- 设当前计数为"t",其初始值为(0(
- 设j=i。其中j小于(i+5(-并且-小于month,递增t。递增(2((跳过周末(,然后从从该行开始,直到"i"超过该月的最大天数
- 应用成功和快乐,并从开始重复,直到总工作日数是(0(
function countDays($y, $m, $ignore = false)
{
$result = 0;
$loop = strtotime("$y-$m-01");
do if(!$ignore or !in_array(strftime("%u",$loop),$ignore))
$result++;
while(strftime("%m",$loop = strtotime("+1 day",$loop))==$m);
return $result;
}
echo countDays(2013,1,array(6,7));//23
echo countDays(2013,2);//28