我正在尝试根据日期范围使间隔动态化。
考虑这个数据集:
$data = [
"2016-06-01": 2,
"2016-06-01": 2,
"2016-06-02": 2,
"2016-06-02": 2,
"2016-06-03": 2,
"2016-06-03": 2,
"2016-06-04": 2,
"2016-06-04": 2,
...
];
我想根据日期范围间隔对值进行求和。
所以对于例如:
$start_date = "2016-06-01";
$end_date = "2016-07-01";
// some function that returns interval dates based on range
$interval_dates = [
"2016-06-01",
"2016-06-05",
"2016-06-10,
...
];
基于此,我遍历$data
数组并获得间隔的总和。
但需要注意的是,间隔日期应基于日期范围:
例如:
如果明年$end_date
,则间隔日期如下:
$interval_dates = [
"2016-06-01",
"2016-08-01",
"2016-10-01"
];
因此间隔基于开始日期和结束日期之间的差异。差异越大,间隔越大。
到目前为止:
public function getIntervalDates($start_date, $end_date, $interval = 5)
{
$start_date = new \DateTime($start_date);
$end_date = new \DateTime($end_date);
// get the difference in days
$diff_object = $start_date->diff($end_date);
$diff_days = $diff_object->days;
// set the interval days based on difference in days
// and the interval
$interval_days = round(intval($diff_days) / $interval);
// set the first date to given start date
$interval_dates[] = $start_date->format("Y-m-d");
$current_date = $start_date;
for($i=0; $i < $interval; $i++) {
// set interval dates by incrementing
// by interval days
$current_date->add(new \DateInterval("P".$interval_days."D"));
// Dont go beyond end date
if($current_date < $end_date) {
array_push($interval_dates, $current_date->format("Y-m-d"));
}
}
// add end date
$interval_dates[] = $end_date->format("Y-m-d");
return $interval_dates;
}
这种解决方案有点可行,但不可靠。
例如:如果选择大范围,例如:2016-06-10至2020-06-10,它只返回2个日期。
我认为必须有一个数学公式来解决这类问题。