【问题标题】:How to count number of days of each month in particular date range in php dynamically如何在php中动态计算特定日期范围内每个月的天数
【发布时间】:2017-04-20 04:49:36
【问题描述】:

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

例如,用户选择了 2016 年 12 月 10 日至 4 月 20 日的日期范围。那我怎么能得到否。在该范围内的 12 月、1 月、2 月、3 月和 4 月的天数。 IE。十二月=22 天,一月=31 天,二月=28 天,三月=31 天,四月=20 天。

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

考勤报告视图如下所示

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

但我想在这样的合并列中显示月份。

请指导我完成这件事。再次非常感谢您。

【问题讨论】:

  • 到目前为止您尝试过什么?向我们展示您的代码,以便我们为您提供帮助。
  • @TomUdding 我想根据日期范围动态地跨月标题。
  • 您好,您需要尝试一些代码,然后如果您的代码遇到任何问题,我们可以解决。
  • 您可以尝试 cal_days_in_month 获取给定月份和年份的天数 php.net/manual/en/function.cal-days-in-month.php
  • 我知道亲爱的。例如,用户选择了 2016 年 12 月 10 日至 4 月 20 日的日期范围。那我怎么能得到否。在该范围内的 12 月、1 月、2 月、3 月和 4 月的天数。 IE。十二月=22 天,一月=31 天,二月=28 天,三月=31 天,四月=20 天。

标签: javascript php jquery html css


【解决方案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 [▼“四月”=>“20”]
  • 这是我得到的输出:数组([Dec] => 21 [Jan] => 31 [Feb] => 28 [Mar] => 31 [Apr] => 20)跨度>
【解决方案2】:
<?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;
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2021-05-01
    相关资源
    最近更新 更多