Я использую такую функцию:
/**
* Вычисляем разницу между двумя timestamps
* Параметры:
* string $date_start начальная дата в формате unix timestamp
* string $date_finish конечая дата в формате unix timestamp
* Возвращает
* массив в следующем формате: 0 => секунды, 1 => минуты, 2 => часы, 3 => дни, 4 => месяцы, 5 => годы
* @author zerkms (Ivan Kurnosov)
*/
function calcPeriod($date_start, $date_finish) {
$st = explode('-', date('d-m-Y-H-i-s', $date_start));
$fin = explode('-', date('d-m-Y-H-i-s', $date_finish));
if (($seconds = $fin[5] - $st[5]) < 0) {
$fin[4]--;
$seconds += 60;
}
if (($minutes = $fin[4] - $st[4]) < 0) {
$fin[3]--;
$minutes += 60;
}
if (($hours = $fin[3] - $st[3]) < 0) {
$fin[0]--;
$hours += 24;
}
if (($days = $fin[0] - $st[0]) < 0) {
$fin[1]--;
$days = date('t', mktime(1, 0, 0, $st[1], $st[0], $st[2])) - $st[0] + $fin[0];
}
if (($months = $fin[1] - $st[1]) < 0) {
$fin[2]--;
$months += 12;
}
$years = $fin[2] - $st[2];
return array($seconds, $minutes, $hours, $days, $months, $years);
}
вот пример ипользования:
$date_finish = strtotime("1-03-2008");
$date_start = strtotime("31-01-2008");
$result = calcPeriod($date_start, $date_finish);
echo 'C ' . date('h:i:s d-m-y', $date_start) . ' по '. date('h:i:s d-m-y', $date_finish) .' прошло ' . $result[0] . ' секунд ' . $result[1]. ' минут ' .$result[2] . ' часов ' .$result[3] . ' дней ' . $result[4] . ' месяцев ' . $result[5] . ' лет <br>';
Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!