end day, we cross a month boundary. Calculate last day of start date. Otherwise we can just do a simple difference. */ $newer_date = ($newer_date == FALSE ? (time()) : $newer_date); if($older_date>$newer_date) { // Just in case the wrong way round $tmp=$newer_date; $newer_date=$older_date; $older_date=$tmp; } $new_date = getdate($newer_date); $old_date = getdate($older_date); $result = array(); $outputArray = array(); $params = array( 6 => array('seconds',60, $sec, $secs), 5 => array('minutes',60, $min, $mins), 4 => array('hours',24, LANDT_05, LANDT_05s), 3 => array('mday', -1, LANDT_04, LANDT_04s), 2 => array('',-3, LANDT_03, LANDT_03s), 1 => array('mon',12, LANDT_02, LANDT_02s), 0 => array('year', -2, LANDT_01,LANDT_01s) ); $cy = 0; foreach ($params as $parkey => $parval) { if ($parkey == 2) { $result['2'] = floor($result['3']/7); $result['3'] = fmod($result['3'],7); } else { $tmp = $new_date[$parval[0]] - $old_date[$parval[0]] - $cy; $scy = $cy; $cy = 0; if ($tmp < 0) { switch ($parval[1]) { case -1 : // Wrapround on months - special treatment $tempdate = getdate(mktime(0,0,0,$old_date['mon']+1,1,$old_date['year']) - 1); // Last day of month $tmp = $tempdate['mday'] - $old_date['mday'] + $new_date['mday'] - $scy; $cy = 1; break; case -2 : // Year wraparound - shouldn't happen case -3 : // Week processing - this shouldn't happen either echo "Code bug!
"; break; default : $cy = 1; $tmp += $parval[1]; } } $result[$parkey] = $tmp; } } // Generate output array, add text for ($i = 0; $i < ($show_secs ? 7 : 6); $i++) { if (($i > 4) || ($result[$i] != 0)) { // Only show non-zero values, except always show minutes/seconds $outputArray[] = $result[$i]." ".($result[$i] == 1 ? $params[$i][2] : $params[$i][3]); } } return ($mode ? $outputArray : implode(", ", $outputArray)); } } ?>