посчитать разницу между TIMESTAMP на PHP

Быстрый переход:
Maikl

Maikl

Member
#1   01 октября 2008 13:57
Всем привет!

Поздравляю всех с днем города Астрахань :)

А вот и сама проблема:
Есть две временные метки TIMESTAMP. Требуется средствами PHP вычислить разницу и вывести ее в днях, месяцах и годах. Фактически нужно посчитать разницу в датах, то есть вывести что то типо такого: "прошло 15 дней 2 месяца и 4 года"
Два дня голову ломаю, пока безуспешно.
Алексей

Алексей

Administrator
#2   01 октября 2008 19:23
Я использую такую функцию:

/**
	* Вычисляем разницу между двумя 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>';

Отредактировано: Alex (01.10.2008 19:35, 8 лет назад)

Быстрота и надежность... Ну и красота тоже, конечно