如何动态获取日期范围之间的日期间隔

时间:2016-06-10 20:30:47

标签: php date math graph

我正在尝试根据日期范围使间隔动态化。

考虑这个数据集:

$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个日期。

我认为必须有一个数学公式来解决这类问题。

0 个答案:

没有答案