如何动态地计算php中特定日期范围内每个月的天数

时间:2017-04-20 04:49:37

标签: javascript php jquery html css

我首先要感谢您花时间解决我的问题。

例如,用户选择2016年12月10日至4月20日的日期范围。然后,我怎么能得到否。在该范围内的12月,1月,2月,3月和4月的日子。即。 12月= 22天,1月= 31天,2月= 28天,3月= 31天,4月= 20天。

我正在为员工制作出勤报告。在考勤报告中,用户将选择日期范围以获取考勤报告。

出勤报告视图如下所示

enter image description here

如上图所示,月份编号显示在表格的第一行,即

enter image description here

但是我想在合并列中显示这样的月份。 enter image description here

请指导我完成这件事。非常感谢你。

2 个答案:

答案 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;
}
?>