【问题标题】:Date Period PHP日期期间 PHP
【发布时间】:2017-12-28 04:02:43
【问题描述】:

我想根据开始日期和结束日期呈现日期期间,例如:

输入:

  • 开始日期:2017 年 12 月 30 日
  • 结束日期:2017 年 3 月 31 日
  • 间隔:每月

我想要的输出:

  1. 2017 年 12 月 30 日
  2. 30/01/2018
  3. 2018 年 3 月 30 日(缺少 2 月,因为它没有 30 日)

那里有我的代码:

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');

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

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

编辑:解释输入:

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

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

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

我使用这个功能来添加计划重复事件,比如插件事件日历,你们可以在https://wpshindig.com/events/community/add看例子

【问题讨论】:

  • 这有什么问题?日期格式? 3 月 2 日而不是 3 月 3 日?你试过什么。您是否让它运行了几年才能看到更多的模式发展到发现真正的问题?
  • 嗨@JasonB,您可以在我的问题上看到我真正想要的正确输出,它应该显示 30/03/2018 而不是 02/03/2018(第三个结果错误)
  • 会一直是第 30 次吗?
  • 不。它基于开始日期输入和间隔月份。例如,开始日期是 31/12/2017,结果将是 31/01/2018、31/03/2018、31/05/2018 ....
  • 好的 - 我们正在取得进展。似乎 DatePeriod 不是要走的路。我将创建一个应该为您执行此操作的函数。

标签: php date


【解决方案1】:

我可以建议您解决问题。 由于 DatePeriod 在二月中断,我们可以分别获取年份和月份并附加日期。但这只适用于一年。 示例:

   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>";
    }
}

【讨论】:

  • 您的函数 100% 不正确,如果开始日期为 31-12-2017,则返回错误。但是你的想法对我帮助很大。从你的功能开发,我现在有正确的功能。谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 2010-11-05
  • 2011-06-12
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多