日期PHP

时间:2017-12-28 04:02:43

标签: php date

我想根据开始日期和结束日期渲染日期,例如:

输入:

  • 开课日期:30/12/2017
  • 截止日期:31/03/2017
  • 间隔:每个月

我想要的输出:

  1. 30/12/2017
  2. 30/01/2018
  3. 30/03/2018(2月因为没有30日而失踪)
  4. 我的代码:

    function period_days($start_date, $int, $end_date){
        $begin = new DateTime( $start_date );
        $end = new DateTime( $end_date );
    
        $interval = DateInterval::createFromDateString($int);
        $period = new DatePeriod($begin, $interval, $end->modify( '+1 day' ));
        return $period;
    }
    echo period_days('30-12-2017', '1 month', '31-03-2018');
    

    结果返回错误(第3个应该是“2018-03-30”):

    "2017-12-30 00:00:00" 
    "2018-01-30 00:00:00"
    "2018-03-02 00:00:00"
    

    编辑:解释输入:

    开始日期格式可以是'2017年12月31日'或'2018年1月的第一个星期一'或'2017年12月的第三个星期二'或'2017年12月28日'......

    时间间隔可以是“1天”,“1个月”,“2个月”,“1年”......

    结束日期格式为d-m-Y '01 / 12/2018'

    我使用此功能添加计划重复活动,例如插件活动日历,你们可以在https://wpshindig.com/events/community/add上看到示例

1 个答案:

答案 0 :(得分:1)

我可以建议你一个解决方法。 由于DatePeriod在2月份中断,我们可以分别获得年份和月份以及附加日期。但这仅适用于一年。 示例:

   function periodDays($start_date, $int, $end_date){
    $begin = new DateTime($start_date);
    $end = new DateTime($end_date);
    $startDay = $begin->format("d");

    $interval = DateInterval::createFromDateString($int);
    $period = new DatePeriod($begin, $interval, $end);
    foreach($period as $date){
        echo $date->format("Y-m-") .$startDay. "<br>";
    }
}