Php 在给定开始日期和持续时间的情况下,如何计算每月的天数?
试图找出一个小问题。我有一个开始日期和持续时间(以周为单位),需要计算持续时间内每月的工作天数 例如: 开始日期:2011-02-07 持续时间:10周 我想得到以下信息: 2月:16天 3月:23天 四月:十一天 任何帮助都会很好。谢谢Php 在给定开始日期和持续时间的情况下,如何计算每月的天数?,php,datetime,codeigniter,Php,Datetime,Codeigniter,试图找出一个小问题。我有一个开始日期和持续时间(以周为单位),需要计算持续时间内每月的工作天数 例如: 开始日期:2011-02-07 持续时间:10周 我想得到以下信息: 2月:16天 3月:23天 四月:十一天 任何帮助都会很好。谢谢 $start=创建日期('2011-02-07'); $start=date_create('2011-02-07'); $interval=new DateInterval('P10W'); $end=date_add(clone $start,$inter
$start=创建日期('2011-02-07');
$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);
$interval=新的日期间隔('P10W');
$end=date\u add(克隆$start,$interval)//使用clone,否则$start将被更改
$period=new DatePeriod($start,new DateInterval('P1D'),$end);
foreach($期间为$天){
如果($day->format('N')format('F')]++;//N是1-7,其中周一=1
}
var_转储(工作日);
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);
从周一到周五的工作日?也许这可以帮你弄清楚:这也是我得到的。我如何为DateInterval设置一个变量?我也不认为我有DateInterval可用,因为它只有5.3版本,没有任何方法可以做到这一点?你需要PHP大于或等于5.3版本。0@Gordon:修复了语法错误-forgot关闭括号。此外,由于函数的工作方式很奇怪,因此在
date\u add
行中添加了clone
。但是,此方法必须使用PHP5.3或更高版本。对于以前的版本,可以使用date()进行计算
但是新的DateTime/DateInterval/DatePeriod对象为您处理闰年和其他边缘情况时,您可能会遇到问题。@Gordon:这些通知是关于未定义的索引和变量的。如果您想避免它们,您可以初始化$workdays=array('一月'=>0,…)
在循环之前。@gordon如果日期和持续时间是变量怎么办?持续时间是一个类似于10的整数,并且日期是相同的。抱歉应该更清楚。@Brian没有问题:strotime($date);strotime(“+$w weeks”)
@gordon我想在每月的最终天数中添加一个值是什么?我不确定在计数时在哪里添加该值。@Brian上述方法不知道从一个月到另一个月的转换时间,因此您必须添加一个$previousMonth变量,并将其与$month变量进行比较,以及它们何时不同你知道新的一个月开始了。作为替代方法,只需在结果数组上使用array\u walk
或array\u map
。
Array
(
[Feb] => 16
[Mar] => 23
[Apr] => 11
)