Obliczanie czasu przy pomocy instrukcji warunkowych

0

Witam.

Mam pewien problem. W php nie jestem już raczej początkującym, z prostymi skryptami sobie radzę bez problemów. Ten też tak wyglądał, jednak pomyliłem się.

Opiszę swój problem od początku:

W bazie danych, mam zapisany czas, jednak w int i jako liczba, bo nie potrzebuję podziału na godziny i minuty.

Próbuję policzyć procent tej godziny, i wyświetlić to w formacie czasu, czyli na przykład 1:30 zamiast 1.5 (1h 30 minut zamiast 1 całość i 5 dziesiątych).

W tym celu zamieniłem czas z bazy danych mysql (zapisany w godzinach) na minuty:

$czasminuty = $czasgodziny * 60;

następnie, wyliczyłem procent z tych minut :

$czasprocent = $czasminuty * 0.40; //podany przykładowy procent 

potem próbowałem, z tej wyliczonej ilości minut, wyciągnąć całości, czyli godziny za pomocą instrukcji warunkowych :

for ($godziny = 0; $czasprocent <= 60; $godziny ++){
		
		$czasproc = $czasprocent - 60;
		echo $godziny;
		echo ":";
		echo $czasproc;
		
		} 

oraz tak

if ($czasprocent > 60){
		$godziny++;
		$czasproc = $czasprocent - 60;
		echo $godziny;
		echo ":";
		echo $czasproc;
		$godziny = 0;
		}

no i jeszcze tak


do {
			if ($czasprocent >= 60){
				$j++;
				$czasminus = $czasprocent - 60;
		echo $godziny;
		echo ":";
		echo $czasminus;
			}
		}
		while ($czasprocent >=60);

Być może, wyda się to dla was śmieszne, ale żaden sposób nie działa.

Problem może być błahy i wyjdę na idiotę... no ale cóż, sam chyba nie dam rady.

Nigdy wcześniej nie robiłem takiego skryptu i nie wiem jak go porządnie wykonać.

Serdecznie proszę o pomoc.

0

Nie lepiej skorzystać z unix timestampa i mieć cały zestaw funkcji (mktime, date, etc) do pracy na nim? Też dostajesz int.

2

Coś w rodzaju:

$godzinaFloat = 23.25;
$godzinaInt = (int)$godzinaFloat;
$minuty = 60 * ($godzinaFloat - $godzinaInt) 
$czas = sprintf("%d:%02d", $godzinaInt, $minuty);
echo $czas; // czy co tam chcesz z tym robić
0

Może i lepiej. Ale nie pomyślałem wcześniej i teraz musiałbym modyfikować kilkaset rekordów w bazie.
Raczej tak nie zrobię...

#Cholera wie

Świetnie, o to mi chodziło. Bardzo dziękuję :)

0

dwa pierwsze sposoby nie działały bo wprowadziłeś zmienną "czasproc" obok "czasprocent", z której błędnie korzystasz - gdybyś zamienił wszystkie "czasproc" na "czasprocent" w pierwszym sposobie to by działało (no i jeszcze powinieneś wypisywać wynik po końcu pętli)
drugi sposób też by działał po zamianie ale poprawnie tylko do dwóch godzin
a trzeci sposób po prostu nie ma sensu

1 użytkowników online, w tym zalogowanych: 0, gości: 1