Jump to content
naXe

Pobieranie czasu z sekund

Recommended Posts

Witam,
 
chciałbym z liczby sekund pobrać ilość miesięcy, dni, godzin i minut. Udało mi się pobrać wszystko oprócz liczby miesiący.
Liczba miesięcy ma uwzględniać także rok przystępny (luty 28 lub 29 dni = 1 miesiąc).
 
Stworzyłem takie funkcje:

	function secondsInMonth($rok, $miesiac) {
		$miesiace = array(2678400, 2419200, 2678400, 2592000, 2678400, 2592000, 2678400, 2678400, 2592000, 2678400, 2592000, 2678400);

		return $rok % 4 == 0 && ($rok % 100 != 0 || $rok % 400 == 0) && $miesiac == 2 ? $miesiace[$miesiac - 1] + 86400 : $miesiace[$miesiac - 1];
	}

	function secondsToTime($sekundy) {
		$rok = date('Y');
		$miesiac = date('n');

		$liczba_miesiecy = Floor($sekundy / secondsInMonth($rok, $miesiac));
		$liczba_dni = Floor($sekundy % secondsInMonth($rok, $miesiac) / 86400);
		$liczba_godzin = Floor($sekundy % 86400 / 3600);
		$liczba_minut = Floor($sekundy % 3600 / 60);

		if($liczba_miesiecy == 1) $string_miesiac = "mc";
		else if($liczba_miesiecy > 1 && $liczba_miesiecy < 5) $string_miesiac = "mce";
		else $string_miesiac = "mcy";

		return "$liczba_miesiecy".$string_miesiac.", $liczba_dni".d.", $liczba_godzin".h." i $liczba_minut".m."";
	}

Do tablicy dodałem liczby sekund w miesiącach począwszy od stycznia, a skończywszy na grudniu.
Przykładowy wynik: 
Liczba sekund: 3258635
Zwraca: 0h, 7m
 
i dodatkowo ostrzeżenia: Division by zero in przy:

		$liczba_miesiecy = Floor($sekundy / secondsInMonth($rok, $miesiac));
		$liczba_dni = Floor($sekundy % secondsInMonth($rok, $miesiac) / 86400);
Edited by naXe

www.topfrags.pl  | www.gs-dev.pl

Share this post


Link to post
Share on other sites
function secondsToTime($seconds) {
	$dtF = new DateTime("@0");
	$dtT = new DateTime("@$seconds");
	return $dtF->diff($dtT)->format('%y, %m, %d, %h i %i');
}

Ale po zmianie na kod z pierwszego posta (z poprawkami) czas się zmienił, bodajże o jeden miesiąc.


www.topfrags.pl  | www.gs-dev.pl

Share this post


Link to post
Share on other sites

Nie wiem po co dajesz jakieś @0 i @$...

 

Ja tego używam w ten sposób:

$now = time();
         
        $date1 = new DateTime;
        $date2 = new DateTime;
         
        $date1->setTimestamp( $ts );
        $date2->setTimestamp( $now );
         
        $interval = $date1->diff( $date2 );
         
        return array(
                'year'     => $interval->y,
                'day'      => $interval->d,
                'month'    => $interval->m,
                'hour'     => $interval->h,
                'minute'   => $interval->i,
        );

i później możesz to sobie parsować jak tam chcesz ale działa na pewno prawidłowo

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

W celu świadczenie usług przez nasz Serwis na najwyższym poziomie, w ramach Serwisu wykorzystujemy pliki Cookies (tzw. ciasteczka). Korzystając ze stron Serwisu IPSBEYOND.PL bez zmiany ustawień przeglądarki będą one zapisane w pamięci urządzenia. Jeżeli nie dokonacie Państwo zmiany ustawień przeglądarki internetowej to wyrażacie zgodę na zapisywanie plików Cookies.