1
我希望用户能够选择日期范围和时间间隔以显示结果,例如“显示2017年1月1日至2017年4月1日期间的结果,按日期列出|周|月“在两个日期之间找到不同的长时间间隔
因此,如果他们选择了一天,我会在2017年1月1日之前将结果分组; 2017年1月2日; 2017年1月3日;等等......
如果他们选择了一周,那会是2017年1月1日; 2017年1月8日; 2017年1月15日;等等......
我现在使用的方法如下:
if(isset($chosenInterval) && ($chosenInterval == "week" || $chosenInterval == "day")) {
$timeFormat = "F j, Y";
} else {
$timeFormat = "F Y";
$chosenInterval = "month";
}
$start = (new DateTime($start))->modify('first day of this month');
$end = (new DateTime($stop))->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 '.$chosenInterval);
$period = new DatePeriod($start, $interval, $end);
foreach($period as $dt) {
$dataLabels[] = $dt->format($timeFormat);
}
的问题是,如果用户选择2017年1月8日 - 2017年1月20日,它仍包括所有的日期在一月。
理想的情况下它会显示:
- 日:2017年1月8日; 2017年1月9日; ... 2017年1月19日; 2017年1月20日
- 星期:2017年1月8日; 2017年1月15日
- 月份:一月,2017年
如何做到这一点有什么建议?谢谢!
任何特别的原因,为什么你不希望设置'$ start'和'$ end'到选择的开始和结束日期? – Aydin4ik
@Aydin不是真的,我对DateTime对象不是很熟悉,所以我将代码从另一个类似的线程中解除。我试图删除修改部分,但遇到了一个错误,所以我放弃了这个想法。这样做确实让我更接近了,尽管我在2017年8月7日 - 2017年9月7日进行了一项测试,测试时间间隔为一个月,而我只有8月份回来 - 而不是9月份。任何想法为什么? – Matt