我有一个日期
的数组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天。
如何自动计算此间隔?
答案 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/>";
}