Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obliczanie czasu pracy w PHP
Forum PHP.pl > Forum > PHP
php__amator
Od pewnego czasu usiluje zbudowac dodatkowy element majacy za zadanie obliczac na podstawie wprowadzonych informacji czas pracy.
W excell'u jest to banalnie proste czego nie moge powiedziec o PHP. Dlatego pilnie potrzebuje wsparcia, podpowiedzi jak to zrobic.

Interesuje mnie obliczanie czasu wg takich kryteriow: dd/mm/rr gg:mm
czas rozpoczecia pracy
czas zakonczenia pracy
w wyniku obliczen chcialbym uzyskac: calkowity czas pracy w postaci hh:mm
niby nic trudnego ale kiedy zaczyna sie prace jednego dnia a konczy drugiego
pojawia sie problem.
Jesli zechcial by ktorys z szanownego grona podpowiedziec jak najprosciej i najefektywniej zrobic form
do tego bylbym niezmiernie wdzieczny.

Pozdrawiam
phpamator

z tego formularza przesylam dane.
  1. <form method="post">
  2. <input name="h1" type="text" value+""> // rozpoczecie pracy
  3. <input name="h2" type="text" value+""> // koniec pracy
  4. <input name="h3" type="text" value+""> // przerwa w pracy
  5. <input type="submit" name="submit" value="submit">
  6. </form>

Smertius
Zainteresuj się http://www.php.net/manual/pl/class.datetime.php szczególnie metodą DateTime::diff nie będziesz miał żadnych problemów z operacjami o których wspomniałeś.
php__amator
Dziękuję za wskazówkę, udaję się więc niezwłocznie we wskazane miejsce celem pobrania odpowiedniej wiedzy.
Pozdrawiam

P.S.
Jesli w międzyczasie ktoś jednak zechciałby klepnąć jakiś prosty skrypcik jako poglądowy/edukacyjny ... byłbym wdzięczny.


Znalazłem tutaj: http://pl.php.net/manual/pl/class.datetime.php, podany przez szanownego kolegę link nie wskazał wymaganych informacji smile.gif
Poczytam więc, może się czegoś nauczę smile.gif
Jako amator/początkujący nie kumam jeszcze wielu zagadnien smile.gif
Pozdrawiam
Maciek1705
z tego co pamiętam to ja robiłem tak:
data zarówno rozpoczęcia jak i zakończenia pracy zmieniamy z formatu dd:mm:rrrr hh:mm:ss na uniksową czyli wyrażoną w liczbie sekund potem od daty zakończenia odejmujemy datę rozpoczęcia. Podany wynik jest w sekundach wiec dzielimy to przez 86400 uzyskany wynik jest podany w dniach jeżeli chciałeś to mieć w godzinach i minutach to robisz to inaczej nie dzielisz tego przez 86400 tylko przez 3600 wtedy wynik z dzielenia to ilość godzin jaka Cię interesuje a reszta z dzielenia (musisz ją podzielić przez 60 to minuty, reszta tej reszty to sekundy) większej filozofii tu nie ma potrzebne Ci jedynie funkcje operujące datą mktime date itp. no i wiedza z zakresu dzielenia mnożenia odejmowania ;P
Smertius
Przykład użycia wink.gif

  1. $m = new DateTime('2011-08-29 18:00:00');
  2. $t = new DateTime('2011-08-27 12:00:00');
  3. $d = $m->diff($t);
  4. echo 'Rożnica to: ';
  5. echo ' ' . $d->days . ' dni ';
  6. echo ' ' . $d->h . ' godzin ';
  7. echo ' ' . $d->i . ' minut ';
  8. echo ' ' . $d->s . ' sekund ';
php__amator
Witam i dziękuję,
Działa, wykorzystałem ale nie jestem do końca zadowolony.
Muszę zmienić na nieco inny sposób liczenia - automatyczny
W PHP może to być problem, dlatego spróbuję to zrobić używając Javascript.
Chciałbym uzyskać efekt następujący:
Wpisuję date i godzinę rozpoczęcia pracy do jednego <INPUT>'a
i datę i godzinę zakończenia pracy do drugiego w efekcie czego po automatcznym
dokonaniu obliczen dostaje w polu czas pracy ilość godzin i minut.

Wszelkie podpowiedzi mile widziane - uczę się szybko - jutro pewnie już będę wiedział jak to zrobić smile.gif

pozdrawiam


Do: Maciek1705
Nie chciałem niepotrzebnie komplikować sobie życia choć nie wygląda to wcale tak źle i faktycznie chyba było by całkiem dobrze w ten sposob liczyc godziny.
Zmęczę temat jutro, może coś z tego wypocę.

Pozdrawiam

sadistic_son
No a nie byłoby prościej obliczyć różnicy czasów po przeróbce ich na unixowy za pomocą strtotime?
  1. $start=strtotime($_POST['h1']);
  2. $end=strtotime($_POST['h2']);
  3. $diff=$end-$start;
  4. $hours=$diff/3600;
  5. echo "Pracowales $hours godzin";
Jeśli coś pochrzaniłem czy nie takie było Twoje pytanie to sorx. Przyznaje, że nie zapoznałem się zbyt dokładnie z resztą postów oprócz pierwszego.
php__amator
Witam,
No faktycznie, nie wyglada to na zbyt skomplikowane uzywając funkcji strtotime.
Pytanie: czy wykorzystujac ten sposob wprowadzenie daty i czasu w formacie dd-mm-rrrr gg:mm:ss
nie spowoduje jakiegoś problemu ?
Jeśli tak (może być konieczne podanie także dnia rozpoczęcia pracy ponieważ zdarza sie
ze pracownik startuje przed polnoca jednego dnia a konczy w poludnie nastepnego)

to konieczne bedzie rozszerzenie dzialania na dni, miesiace i lata.
Chyba, ze strtotime poradzi sobie z tym bezpośrednio.

Może myślę trochę "dookoła" ale nie jest mi znany jeszcze ten temat wiec wolę zapytać
zorientowanych smile.gif

Pozdrawiam
phpamator
longinus_torwaldzki
cześć - otrzymane z formularza zmienna przepuszczasz przez strtotime();
odejmujesz późniejszą od wcześniejszej i masz ilość sekund.

longinus
sadistic_son
Cytat(phpamator @ 12.08.2011, 12:59:35 ) *
Chyba, ze strtotime poradzi sobie z tym bezpośrednio.
Poradzi sobie. strtotime przerobi większość dat i czasów na unixowy czas. Nawet zdania typu "next Monday" czy "first day last month" nie stanowią problemu dla tej funkcji.
php__amator
Hej,
No faktycznie, porzdził sobie bez problemu. Moja tabelka dziala jak nalezy, nie zmienia to jednak faktu ze musze to teraz przerobic i uzbroic w funkcje zapisywania wynikow do bazy.
Ale to juz nie problem.
Jeszcze chcialbym aby liczenie odbywalo sie od razu w chwili wprowadzania danych do inputów.
Z zebranych informacji wynika ze spokojnie Javascript poradzi sobie z tym tematem, jeśli więc ma ktoś doświadczenie
i posługuje sie Javascriptem ...
Chętnie zappoznam sie z czyms takim.

Pozdrawiam
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.