【发布时间】:2017-12-28 04:02:43
【问题描述】:
我想根据开始日期和结束日期呈现日期期间,例如:
输入:
- 开始日期:2017 年 12 月 30 日
- 结束日期:2017 年 3 月 31 日
- 间隔:每月
我想要的输出:
- 2017 年 12 月 30 日
- 30/01/2018
- 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 不是要走的路。我将创建一个应该为您执行此操作的函数。