Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] zliczanie czasu z tablicy
Forum PHP.pl > Forum > Przedszkole
rybosom
z sql pobieram tablicę
  1. <?php
  2. $tab = array(0:15, 0:2, 0:59, 1:30, 1:7);
  3. ?>


gdzie np 0:2 oznacza zero godzin i 2 minuty, 1:7 oznacza jedna godzina i siedem minut

jak obliczyć sumę czasu takiej tablicy?
erix
Ma się rozumieć, to wszystko (wartości w tablicy) jest jako string, nie?

Jakaś pętla (do wyboru, do koloru winksmiley.jpg), explode" title="Zobacz w manualu PHP" target="_manual na dwukropek, może zamienić jeszcze godziny na minuty i potem wszystko dodaj do siebie. Potem na koniec jeszcze sobie wyciągnij godziny, ale to już kwestia gustu. winksmiley.jpg
melkorm
hmm a spróbuj :

  1. SELECT SUM( TIMEDIFF(czasy , cast( '00:00' AS time ) )) FROM czas;


bez cast'a także niby poszło więc spróbuj bez cast też ;p
melkorm
to uzyj z castem mozliwe ze dla danych nie w formacie 00:00 np. 1:02 się krzaczy ;]
erix
Jak? Zrób tak, jak mówiłem - zamień godziny na minuty i zapisz wspólną sumę. Potem (poza pętlą) wyciągnij godziny jak całości z ułamków. winksmiley.jpg
erix
Nie pamiętasz, jak się wyciągało całości z ułamków...? ;/

To tak samo, jakbyś miał zamienić np. 270 minut na godziny i minuty... Pomyśl trochę.
erix
Pokombinuj, takiej błahostki już Ci na tacy nie podam i mam nadzieję, nikt tego nie zrobi. tongue.gif

Przydać się mogą funkcje zaokrąglające. ;]
kefirek
Zobacz może tak
  1. <?php
  2. $tab = array('0:15', '0:2', '0:59', '1:30', '1:7');
  3.  
  4. foreach ($tab as $wynik) {
  5. $rodzielone = explode(":", $wynik);
  6.  
  7. $dane1[] = $rodzielone[0];
  8. $dane2[] = $rodzielone[1];
  9.  
  10. }
  11.  
  12. $suma1 = array_sum($dane1);
  13. $suma2 = array_sum($dane2);
  14.  
  15. $minut = $suma1 * 60;
  16. ?>


Potem godziny mnożysz przez 60 i masz w minutach
zegarek84
Cytat(rybosom @ 13.11.2008, 19:55:40 ) *
z sql pobieram tablicę....

a dokładniej z jakiej bazy?? gdyż są małe niuanse a rozwiązanie juz w zasadzie otrzymałeś choć nie w zapytaniu - rozwiązanie kefirek jest poprawne
Cytat(rybosom @ 15.11.2008, 16:54:48 ) *
zmieniłem typ tablicy na time i domyślnie 00:00:00

no i bardzo dobrze, bo jak wcześniej miałeś 1:7 i na to co pisałeś to w grę w zasadzie wchodziło jako poprawne na 100% tego typu co zaproponował kefirek... jeśli chcesz pobrać wynik w zapytaniu to pobierz wyniki jako TIMESTAMP, mozesz to tez w zapytaniu zsumować a następnie zamienić na datetame... TIMESTAMP - czas w sekundach...
melkorm
suma czasów :
  1. SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(title))%86400) FROM test;


format TIME .

Tylko żen ie zaokrągla do dni ;]

  1. SELECT TIME('2008-01-01 00:00:00' + INTERVAL SUM(TIME_TO_SEC(czas)) SECOND) FROM czasy;


takie coś mi się urodziło tongue.gif zwraca poprawną godzine ale eh brzydkie to w ch*j winksmiley.jpg

//pierwsze też już działa
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.