php - 计算日期数组的平均间隔

时间:2015-07-08 20:03:01

标签: php

我有一个日期

的数组
Array
(
    [0] => 2014-09-05
    [1] => 2014-09-09
    [2] => 2014-09-09
    [3] => 2014-09-11
    [4] => 2014-09-16
    [5] => 2014-09-18
    [6] => 2014-09-25
)

看看这些日期之间的间隔大约是3天。

如何自动计算此间隔?

3 个答案:

答案 0 :(得分:1)

这应该适合你:

只需循环浏览所有日期,然后检查是否还有下一个日期。如果是,则减去两个时间戳并将其添加到$intervals数组。

最后,只需获取间隔的平均值(以秒为单位),因此您可以将其除以3600 * 24以获得平均日间隔。

<?php

    $dates = [
        "2014-09-05",
        "2014-09-09",
        "2014-09-09",
        "2014-09-11",
        "2014-09-16",
        "2014-09-18",
        "2014-09-25",
        ];

    foreach($dates as $key => $date) {
        if(isset($dates[($key+1)]))
            $intervals[] = abs(strtotime($date) - strtotime($dates[($key+1)]));
    }

    $average = array_sum($intervals) / count($intervals);
    echo $average / (3600 * 24);

?>

输出:

   _
3.33  //If you want you can round it up

答案 1 :(得分:1)

生成一个$difference_map数组,其中包含输入$dates数组中两个日期之间的差异,

$difference_map = array_map(function($v, $k) use ($dates){
                    if($k == array_keys($dates)[0]) return;
                    $start = new DateTime($dates[$k-1]);
                    $end  = new DateTime($dates[$k]);
                    $diff = $start->diff($end);
                    return $diff->format('%R').$diff->days;
                }, $dates, array_keys($dates));

然后计算平均值,

$average = array_sum($difference_map)/(count($difference_map)-1);

如果您在此脚本中将显示的数组设为$dates$difference_map将如下所示,

array (size=7)
  0 => null
  1 => string '+4' (length=2)
  2 => string '+0' (length=2)
  3 => string '+2' (length=2)
  4 => string '+5' (length=2)
  5 => string '+2' (length=2)
  6 => string '+7' (length=2)

最后,$average将是,

float 3.3333333333333

答案 2 :(得分:-1)

Array
(
    [0] => 2014-09-05
    [1] => 2014-09-09
    [2] => 2014-09-09
    [3] => 2014-09-11
    [4] => 2014-09-16
    [5] => 2014-09-18
    [6] => 2014-09-25
)



 for($i=count(data);i>0;i--){
         echo date("d",strtotime($data[i]))-date("d",strtotime($data[i-1]))."<br/>";
}