我首先要感谢您花时间解决我的问题。
例如,用户选择2016年12月10日至4月20日的日期范围。然后,我怎么能得到否。在该范围内的12月,1月,2月,3月和4月的日子。即。 12月= 22天,1月= 31天,2月= 28天,3月= 31天,4月= 20天。
我正在为员工制作出勤报告。在考勤报告中,用户将选择日期范围以获取考勤报告。
出勤报告视图如下所示
如上图所示,月份编号显示在表格的第一行,即
请指导我完成这件事。非常感谢你。
答案 0 :(得分:1)
您可以尝试以下内容:
<?php
$begin = new DateTime( '2016-12-10' );
$end = new DateTime( '2017-04-20' );
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($begin, $interval, $end);
$i = 0;
foreach ( $period as $dt ){
if($i==0){
$month[$dt->format('M')] = cal_days_in_month(CAL_GREGORIAN, $dt->format('m'), $dt->format('Y')) - $dt->format('d');
} else {
$month[$dt->format('M')] = cal_days_in_month(CAL_GREGORIAN, $dt->format('m'), $dt->format('Y'));
}
$i++;
}
$month[$end->format('M')] = $end->format('d');
print_r($month);
?>
答案 1 :(得分:0)
<?php
//Calculating Number of Days Per Month in given daterange.
$begin = new \Carbon\Carbon($start_date);
$end = new \Carbon\Carbon($end_date);
$month = array();
if ($begin->month != $end->month) {
$interval = \Carbon\CarbonInterval::month();
$period = new \DatePeriod($begin, $interval, $end);
$i = 0;
$month = array();
foreach ($period as $dt) {
if ($i == 0) {
$month[$dt->month] = $dt->daysInMonth + 1 - $dt->day;
} else {
$month[$dt->month] = $dt->daysInMonth;
}
$i++;
}
$month[$end->month] = $end->day;
} else if ($begin->month == $end->month && $begin->diffInDays($end) == 0) {
$month[$begin->month] = 1;
} else if ($begin->month == $end->month && $begin->diffInDays($end) != 0) {
$month[$begin->month] = $begin->diffInDays($end) + 1;
}
?>