Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php-计算日期数组的平均间隔_Php - Fatal编程技术网

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

php-计算日期数组的平均间隔,php,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天 如何自动计算此间隔?这应该适用于您: 只需循环浏览所有日期,并检查是否还有下

我有一个日期数组

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天


如何自动计算此间隔?

这应该适用于您:

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

最后,只需取时间间隔的平均值,以秒为单位,因此您可以将其除以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);

?>
从输入的$dates数组生成两个日期之间存在差异的$difference\映射数组

然后按平均数计算

$average = array_sum($difference_map)/(count($difference_map)-1);
如果在此脚本中将显示的数组作为$dates,则$difference\u 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将是


你试过什么吗?还没有。我不知道该怎么做,所以这个问题我们在哪里?
$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);
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)
float 3.3333333333333