【发布时间】:2011-01-12 15:25:02
【问题描述】:
试图找出一个小问题。我有一个开始日期和一个持续时间(以周为单位),并且需要计算在此期间每月的工作日数。
例如: 开始日期:2011-02-07 持续时间:10 周
我想取回以下内容:
2 月:16 天 三月:23天 四月:11天
任何帮助都会很棒。谢谢。
【问题讨论】:
-
周一到周五的工作日?
标签: php datetime codeigniter
试图找出一个小问题。我有一个开始日期和一个持续时间(以周为单位),并且需要计算在此期间每月的工作日数。
例如: 开始日期:2011-02-07 持续时间:10 周
我想取回以下内容:
2 月:16 天 三月:23天 四月:11天
任何帮助都会很棒。谢谢。
【问题讨论】:
标签: php datetime codeigniter
5.3 之前的解决方案:
$start = $current = strtotime('2011-02-07');
$end = strtotime('+10 weeks', $start);
$months = array();
while($current < $end) {
$month = date('M', $current);
if (!isset($months[$month])) {
$months[$month] = 0;
}
$months[$month]++;
$current = strtotime('+1 weekday', $current);
}
print_r($months);
输出(codepad):
Array
(
[Feb] => 16
[Mar] => 23
[Apr] => 11
)
【讨论】:
strtotime($date); strtotime("+$w weeks")
array_walk 或array_map。
$start=date_create('2011-02-07');
$interval=new DateInterval('P10W');
$end=date_add(clone $start,$interval);//use clone otherwise $start gets changed
$period=new DatePeriod($start, new DateInterval('P1D'), $end);
foreach($period as $day){
if($day->format('N')<6) $workdays[$day->format('F')]++; //N is 1-7 where Monday=1
}
var_dump($workdays);
【讨论】:
clone 添加到 date_add 行。但是,对于这种方法,您必须使用 PHP5.3 或更高版本。对于以前的版本,您可以使用 date() 进行数学运算,但您可能会遇到闰年问题和新的 DateTime/DateInterval/DatePeriod 对象为您处理的其他边缘情况。
$workdays=array('January'=>0,...)。