php如何取出一个时间段内每个月的开始时间和结束时间存入到数组中
admin
2023-06-16 21:42:00
0

要求:如果时间段的开始时间大于每个月的1号,则把时间段的开始时间存入到数组中,反之,则把1号存入到数组中,如果时间段的结束时间大于每个月的最后一天,则把时间段的结束时间存入到数组中,反之,则把每个月的最后一天存入到数组中

注意:如果是整月,则设置falg字段标志

 date('Y-m-1', $timestamp),
      'month_end_day' => date('Y-m-'.$mdays, $timestamp)
      );
  }

function get_months($sdate, $edate) {
    $range_arr = array();
    $one_date=$sdate;//$sdate会不断变化,但是需要使用到第一次的$sdate值,
    do {
        
      $monthinfo = get_monthinfo_by_date($sdate);
      $end_day = $monthinfo['month_end_day'];
    
      $tmp=array();
     
      //把开始时间和每个月的1号相比,如果开始时间大于1个月的1号,则把开始时间放入到数组中,反之,则把1个月的1号放入到数组中
      if(strtotime($one_date)>strtotime($monthinfo['month_start_day']))
      {
         $tmp['SD'] = $one_date;
         
         
      }else
      {
          $tmp['SD'] = $monthinfo['month_start_day'];
        
            $tmp['Flag'] =date('Ym00000000',strtotime($monthinfo['month_start_day']));
        
      }
      
       //把结束时间和每个月的最后一天相比,如果结束时间大于一个月的最后一天,则把结束时间放入到数组中,反之,则把一个月的最后一天放入到数组中
      if( strtotime($edate)>strtotime($monthinfo['month_end_day']))
      {
          $tmp['ED']=$end_day;
          
      }else
      {
          $tmp['ED']=$edate;
          if(strtotime($edate)!=strtotime($monthinfo['month_end_day']))
          {
            unset($tmp['Flag']);//开始时间里面设置了$tmp['Flag'],如果最后一个月的最后一天和时间段的结束时间不一样,就删除这个$tmp['Flag']
          }
      }
        array_push($range_arr,$tmp);
        //下一个月
       $sdate = date('Y-m-d', strtotime($sdate.'+1 month'));
    
    }while($end_day < $edate);
    return $range_arr;
  }
echo "
";
print_r(get_months('2014-02-05', '2014-04-30'));
echo "
";

结果如下

Array
(
    [0] => Array
        (
            [SD] => 20140205
            [ED] => 20140228
        )

    [1] => Array
        (
            [SD] => 20140301
            [Flag] => 20140300000000
            [ED] => 20140331
        )

    [2] => Array
        (
            [SD] => 20140401
            [Flag] => 20140400000000
            [ED] => 20140430
        )

)

相关内容

热门资讯

菲总统马科斯访日,菲律宾民众在... 【环球时报报道 记者 邢晓婧】菲律宾总统马科斯26日抵达日本,开启为期4天的访日行程。据菲律宾ABS...
国家安全部提示:这些码不能随便... 扫码关注,扫码支付,扫码登录……二维码已融入我们工作、生活的方方面面,为我们提供了巨大便利。然而,国...
伊比莱瑞取得不锈钢粉末自动注射... 国家知识产权局信息显示,东莞市伊比莱瑞科技有限公司取得一项名为“一种不锈钢粉末自动注射成型装置”的专...
星链涨价5倍,五角大楼和Spa... 【文/观察者网 熊超然】随着亿万富翁马斯克拥有的“星链”(Starlink)网络引导美制自杀式无人机...
人民日报刊文:妄图洗白成“解放... 妄图洗白成“解放者”,日本注定徒劳(环球走笔)牛瑞飞 《人民日报》(2026年05月27日 第 15...
AI支付时代要来了吗?支付宝A... 【大河财立方 记者 杨霄 王宇】5月26日,在支付宝AI支付生态大会上,支付宝宣布,“AI支付”已完...
毫厘间的山河:0.001%背后... 元素周期表的版图上,锌,是一块古老而平凡的疆域。但当它的纯度跃升至99.998%时,这块金属便被赋予...
朝鲜进行新型武器系统试射 当地时间5月26日,朝鲜导弹总局和国防科学院进行轻型多用途导弹发射系统和多管战术巡航导弹武器系统试验...
原创 华... 华为各大产品全面发展,而且是多系列多版本,其中手机/笔记本均拥有4个系列,平板/手表均拥有6个系列,...
俄法院裁定:立即赔偿俄约200... △俄罗斯中央银行(资料图)当地时间5月26日,俄罗斯莫斯科仲裁法院批准俄央行的申请,将对欧洲清算银行...