PHP: Counting minutes from dates in array

I have lot's of data printed out from oracle database to array. Some datarows have dates, some only zero.
So I have this kind of data:


02.06.2006 10:11:06
0
0
02.06.2006 20:42:52
03.06.2006 21:04:21
0
0
0
04.06.2006 13:57:28
0
0



So, how can I count minutes from those dates like this:
02.06.2006 10:11:06 - 02.06.2006 20:42:52     is xxx minutes
02.06.2006 20:42:52 - 03.06.2006 21:04:21     is xxx minutes
03.06.2006 21:04:21 - 04.06.2006 13:57:28     is xxx minutes


So those dates are some kind of startimes. And I need to count two different startimes different in minutes.

I can't do it myself :(
excincAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
merwetta1Connect With a Mentor Commented:
try this...

<?php

## recreate your data array
$test_array[] = '02.06.2006 10:11:06';
$test_array[] = '0';
$test_array[] = '0';
$test_array[] = '02.06.2006 20:42:52';
$test_array[] = '03.06.2006 21:04:21';
$test_array[] = '0';
$test_array[] = '0';
$test_array[] = '0';
$test_array[] = '04.06.2006 13:57:28';
$test_array[] = '0';
$test_array[] = '0';


$time1 = 0;
foreach($test_array as $value)
{
      if ($value)
      {
            if ($time1)
            {
                  if (!$time2 = convert_time($value))  echo "invalid data found '$value'<br />";
                  else
                  {
                        $interval = ($time2 - $time1)/60;
                        echo "$value1 - $value is ".number_format($interval, 2).' minutes<br />';
                        $time1 = 0;
                  }
            } else
            {
                  $time1 = convert_time($value);
                  $value1 = $value;
            }
      }
}

function convert_time($time)
{
      if (!preg_match('/(\d{2})\.(\d{2})\.(\d{4}) (\d{2}):(\d{2}):(\d{2})/', $time, $matches))  return false;
      $time_unix = mktime($matches[4], $matches[5],  $matches[6],  $matches[1],  $matches[2],  $matches[3]);
      return $time_unix;
}

?>
0
 
excincAuthor Commented:
I didn't get that work. It printed nothing :(


Actually when I have this kind of data printed out:

02.06.2006 10:11:06
0
0
02.06.2006 20:42:52
03.06.2006 21:04:21
0
0
0
04.06.2006 13:57:28



I need it to be listed excatly like this:

first group duration xxx min
0
0
second group duration xxx min
third group duration xxx min
0
0
0
04.06.2006 13:57:28
0
 
merwetta1Commented:
that's odd. when i run it, i get:

02.06.2006 10:11:06 - 02.06.2006 20:42:52 is 631.77 minutes
03.06.2006 21:04:21 - 04.06.2006 13:57:28 is 44,153.12 minutes

the script could easily be modified to give you the exact output you're looking for, but since it's not working for you, that won't help. hopefully someone else can provide something that will work for you.
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
FunnyManCommented:
A PHP script that printed nothing is a strong indicator of a syntax error.  Check the error log (for me at least its /var/adm/httpd.error_log).
-FM
0
 
excincAuthor Commented:
It works, sorry, my bad :)

Dates were in wrong format in array :-)
0
 
excincAuthor Commented:
But, one thing...

That prints this like you said:


02.06.2006 10:11:06 - 02.06.2006 20:42:52 is 631.77 minutes
03.06.2006 21:04:21 - 04.06.2006 13:57:28 is 44,153.12 minutes



It should be like this:

02.06.2006 10:11:06 - 02.06.2006 20:42:52 is 631.77 minutes
02.06.2006 20:42:52 - 03.06.2006 21:04:21  time is where?????????????????????
03.06.2006 21:04:21 - 04.06.2006 13:57:28 is 44,153.12 minutes      should be 17h x 60min = about 1020min not 44k 153min????
0
 
FunnyManCommented:
To get the intermediate one, change:
$time1 = 0;
to
$time1 = $time2;


Looks like the answer was given in American date format (MM.DD.YYYY), so 03.06 is about a month (~43,000 min) after 02.06.

For European date format (DD.MM.YYYY), just change the last line from:
$time_unix = mktime($matches[4], $matches[5],  $matches[6],  $matches[1],  $matches[2],  $matches[3]);
     return $time_unix;
to
$time_unix = mktime($matches[4], $matches[5],  $matches[6],  $matches[2],  $matches[1],  $matches[3]);
     return $time_unix;

-FM
0
 
FunnyManCommented:
Okay, it's not quite the last line, but close.
-FM
0
All Courses

From novice to tech pro — start learning today.