Поэтому у меня есть следующий массив ( $lifeSpanArray
), и я рассчитываю рассчитать средний интервал между двумя датами.
Что я до сих пор, но я думаю, что я думаю немного не так:
<?php foreach ($lifeSpanArray as $key) { $newTimeAdd = new DateTime($key["timeAdded"]); $newTimeRead = new DateTime($key["timeRead"]); $interval = $newTimeAdd->diff($newTimeRead); var_dump($interval); } ?>
Какие результаты:
Array ( [0] => Array ( [timeAdded] => 07/15/2014 [timeRead] => 07/15/2014 ) [1] => Array ( [timeAdded] => 07/14/2014 [timeRead] => 07/14/2014 ) [2] => Array ( [timeAdded] => 07/13/2014 [timeRead] => 07/15/2014 ) [3] => Array ( [timeAdded] => 07/13/2014 [timeRead] => 07/13/2014 ) [4] => Array ( [timeAdded] => 07/12/2014 [timeRead] => 07/12/2014 ) [5] => Array ( [timeAdded] => 07/12/2014 [timeRead] => 07/12/2014 ) [6] => Array ( [timeAdded] => 07/12/2014 [timeRead] => 07/12/2014 ) [7] => Array ( [timeAdded] => 07/12/2014 [timeRead] => 07/12/2014 ) [8] => Array ( [timeAdded] => 07/12/2014 [timeRead] => 07/12/2014 ) [9] => Array ( [timeAdded] => 07/11/2014 [timeRead] => 07/11/2014 ) [10] => Array ( [timeAdded] => 07/11/2014 [timeRead] => 07/11/2014 ) [11] => Array ( [timeAdded] => 07/10/2014 [timeRead] => 07/11/2014 ) [12] => Array ( [timeAdded] => 07/10/2014 [timeRead] => 07/10/2014 ) )
Попробуйте следующее:
<?php $intervals = array(); foreach ($lifeSpanArray as $key) { $newTimeAdd = new DateTime($key["timeAdded"]); $newTimeRead = new DateTime($key["timeRead"]); $interval = $newTimeAdd->diff($newTimeRead); $intervals[] = $interval->days;//get days } if(!empty($intervals)) { $average = average($intervals); } function average($arr) { return array_sum($arr)/count($arr); } ?>
Ваше решение верное, но не подделывает вызов метода format () для возвращаемого объекта из diff.
Пример из PHP.net:
<?php $datetime1 = new DateTime('2009-10-11'); $datetime2 = new DateTime('2009-10-13'); $interval = $datetime1->diff($datetime2); echo $interval->format('%R%a days'); ?>