webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> porady >> php + mysql

Obliczanie czasu między dwoma datami

autor: Patryk 'yarpo' Jar, ostatnia modyfikacja: 2007-08-17

szukaj: obliczanie czasu między datami obliczanie czasu między datami php php

Przyjmijmy, że mamy dwa zdarzenia. Początek i koniec wycieczki. I są one umieszczone w bazie danych (obie kolumny mają typ datetime), więc zapisane są w taki sposób:

yyyy-mm-dd hh:mm:ss

Jak więc obliczyć ile dni / miesiący / lat dzieli te dwa zdarzenia... Nie da się ich od siebie w takiej formie odjąć, gdyż są to w PHP zwykłe ciągi znaków...

Można zaproponuję, więc moje rozwiązanie. Najpierw sprowadźmy to na ziemię, czyli do uniksowego znacznika czasu:

function uniksowy_znacznik_czasu($start, $koniec) {
	$start = strtotime($start);
	$koniec = strtotime($koniec);
return $koniec-$start;
}

Tym sposobem uzyskaliśmy różnicę między tymi dwoma zdarzeniami wyrażoną w sekundach. No, ale wynik np: „23454323sekund byłeś poza granicami Polski” nikogo na stronie nie zadowoli. Skorzystajmy więc z kolejnej funkcji:

function uniksowy2liczb($czas) {
	$wynik = array();
	// zmienne pomocne przy obliczeniach (dlugość w sekundach)
	$tydzien  = 7*24*60*60;
	$dzien    = 24*60*60;
	$godzina  = 60*60;
	$minuta   = 60;

	if (($wynik[0] = intval($czas/$tydzien)))
	  $czas %= $tydzien;

	if (($wynik[1] = intval($czas/$dzien)))
 	  $czas %= $dzien;

	if (($godzina[2] = intval($czas/$godzina)))
	  $czas %= $godzina;

	$wynik[3] = intval($czas/$minuta);
return $wynik;
}

Po odpowiednim wywołaniu tych funkcji otrzymujemy tablicę, w której na kolejnych pozycjach znajdują się coraz mniejsze „jednostki czasu”. Oczywiście można zrezygnować z tygodni i zostawić same dni, czy też godziny. Jednak to niech już będzie zabawa dla ciekawskich :).

Warto byłoby także zapoznać się z:

Patryk 'yarpo' Jar

Osoby czytające tę publikację przeglądały również:

Chcesz zostać programistą?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org