0

So I have the following array ($lifeSpanArray) and I'm looking to calculate the average interval between the two dates.

What I have so far, but I think I'm thinking slightly wrong with it:

<?php
    foreach ($lifeSpanArray as $key) {

        $newTimeAdd = new DateTime($key["timeAdded"]);
        $newTimeRead = new DateTime($key["timeRead"]);

        $interval = $newTimeAdd->diff($newTimeRead);
        var_dump($interval);
    }
?>

Which outputs:

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
    )
)
MrLore
  • 3,759
  • 2
  • 28
  • 36
user2656127
  • 655
  • 3
  • 15
  • 31
  • Why do you think your solution is wrong? Just feels wrong? Have you tried it? Does it do what you need? That's how you know if it is right or wrong. – John Conde Jul 15 '14 at 13:38

2 Answers2

3

Try the following:

 <?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);
    }

?>
ka_lin
  • 9,329
  • 6
  • 35
  • 56
0

Your solution is correct but do not forger to call the format() method on the returned object from diff.

Example from 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');
?>
Kevin Labécot
  • 2,005
  • 13
  • 25
  • This is what I want to do - but I'm not sure how to place it inside my foreach loop without writing over it each time? – user2656127 Jul 15 '14 at 13:42