Wrote this quick function to do what you ask.
<?php
function countLeapYears($startDate=false, $endDate=false)
{
if(!$endDate || (!$startDate && !$endDate))
return -1;
$start = strtotime($startDate);
$end = strtotime($endDate);
$s_year = date('Y', $start);
$e_year = date('Y', $end);
$leaps = array();
for($i=$s_year; $i<=$e_year; $i++)
{
if(date('L', mktime(12,0,0,1,1,$i)))
{
$leaps[$i] = $i;
}
}
// If the start date is LATER than the leap day (2/29), remove it
if(in_array($s_year, $leaps) && $start > strtotime('02/29/' . $s_year . ' 0:0:0'))
{
unset($leaps[$s_year]);
}
if(in_array($e_year, $leaps) && $end < strtotime('02/29/' . $e_year . ' 0:0:0'))
{
unset($leaps[$e_year]);
}
$years = $e_year - $s_year;
$days = $years * 365;
$days += count($leaps);
return array('days'=>$days, 'leaps'=>count($leaps));
}
echo 'February 28, 2008 to February 28, 2013 ( 5 years, 2 leap years ) :: ';
$info = countLeapYears('02/28/2008', '02/28/2013');
echo $info['days'] . ' days ( ' . $info['leaps'] . ' leaps )<br />';
echo 'March 3, 2008 to March 3, 2013 ( 5 years, 1 leap year ) :: ';
$info = countLeapYears('03/03/2008', '03/03/2013');
echo $info['days'] . ' days ( ' . $info['leaps'] . ' leaps )<br />';
Gives me this output:
February 28, 2008 to February 28, 2013 ( 5 years, 2 leap years ) :: 1827 days ( 2 leaps )
March 3, 2008 to March 3, 2013 ( 5 years, 1 leap year ) :: 1826 days ( 1 leaps )