This function takes array formats (month, day, year), sorry I never use dates like your example, so you will have to explode your date and change the month and days order to use the exmple function below...
<?
function date_range ( $sv, $ev )
{
$data = array ( 'months' => 0, 'days' => array (), 'years' => 0 );
if ( $sv[2] != $ev[2] )
{
for ( $i = $sv[0]; $i <= 12; $i++ )
{
$at = gmmktime ( 0, 0, 0, $i, 1, $sv[2] );
if ( $i == $sv[0])
{
$sd = array ( gmdate ( 't', $at ), $sv[1] );
}
else
{
if ( ( $data['months'] + 1 ) == 12 )
{
$data['years'] += 1;
$data['months'] = 0;
}
else
{
$data['months'] += 1;
}
}
}
$ty = ( $sv[2] + 1 );
while ( $ty != $ev[2] )
{
$data['years'] += 1;
$ty += 1;
}
for ( $i = 1; $i <= $ev[0]; $i++ )
{
$at = gmmktime ( 0, 0, 0, $i, 1, $ev[2] );
if ( $i == $ev[0])
{
$ed = array ( gmdate ( 't', $at ), $ev[1] );
}
else
{
if ( ( $data['months'] + 1 ) == 12 )
{
$data['years'] += 1;
$data['months'] = 0;
}
else
{
$data['months'] += 1;
}
}
}
if ( $ed[1] > ( $sd[0] - $sd[1] ) )
{
if ( ( $data['months'] + 1 ) == 12 )
{
$data['years'] += 1;
$data['months'] = 0;
}
else
{
$data['months'] += 1;
}
$data['days'] = ( $ed[1] - ( $sd[0] - $sd[1] ) );
}
else
{
$data['days'] = ( ( $sd[0] - $sd[1] ) + $ed[1] );
}
}
else
{
if ( $sv[0] == $ev[0] )
{
$data['days'] = ( $ev[1] - $sv[1] );
}
else
{
for ( $i = $sv[0]; $i <= $ev[0]; $i++ )
{
$at = gmmktime ( 0, 0, 0, $i, 1, $sv[2] );
if ( $i == $sv[0])
{
$sd = array ( gmdate ( 't', $at ), $sv[1] );
}
else if ( $i == $ev[0])
{
$ed = array ( gmdate ( 't', $at ), $ev[1] );
}
else
{
if ( ( $data['months'] + 1 ) == 12 )
{
$data['years'] += 1;
$data['months'] = 0;
}
else
{
$data['months'] += 1;
}
}
}
if ( $ed[1] > ( $sd[0] - $sd[1] ) )
{
if ( ( $data['months'] + 1 ) == 12 )
{
$data['years'] += 1;
$data['months'] = 0;
}
else
{
$data['months'] += 1;
}
$data['days'] = ( $ed[1] - ( $sd[0] - $sd[1] ) );
}
else
{
$data['days'] = ( ( $sd[0] - $sd[1] ) + $ed[1] );
}
}
}
return ( $data );
}
// usage
// start must be older than end (if not reverse them)
$one = '29.12.2004';
$two = '29.12.2006';
$one = explode ( '.', $one );
$two = explode ( '.', $two );
// function expects array arguments => (month, day, year), not => (day, month, year)
$out = date_range ( array ( $one[1], $one[0], $one[2] ), array ( $two[1], $two[0], $two[2] ) );
print_r ( $out );
?>
ms!
Main Topics
Browse All Topics





by: minichickenPosted on 2006-08-30 at 06:23:31ID: 17420121
are you looking for something like this:
rials/php/ diff/
http://andymatter.com/tuto
-J