Hoi,
Ben bezig met in- en uitklok systeem met de uren overzicht. Maar hoe kan ik het beste de subtotaal van die ene dag berekenen via php? Ik heb de kolommen: begin_tijd, pauze_tijd en eind_tijd. Allemaal zijn het TIME() kolommen. Ik heb al geprobeerd om gewoon die tijden van elkaar af te trekken beginnend bij eind_tijd, maar dan komt er iets heel raars uit wat niet klopt..
Kan iemand mij helpen?
- subtotaal tijden
-
08-05-2010, 12:55 #1Particulier
- Berichten
- 394
- Lid sinds
- 15 Jaar
subtotaal tijden
-
08-05-2010, 13:18 #2Particulier
- Berichten
- 1.054
- Lid sinds
- 17 Jaar
(My)SQL documentatie eens checken?
-
08-05-2010, 21:51 #3
- Berichten
- 336
- Lid sinds
- 16 Jaar
Luuk wat je het beste kan doen is het volgende.
Deze 4 kolommen: begin_tijd, eind_tijd, pauze_begin, pauze_totaal
Zodra je start met het project vul je met de huidige time() kolom begin_tijd.
Zodra je je pauze begint vul je met de huidige time() kolom pauze_begin.
Zodra je je pauze eindigt haal je de inhoud uit kolom pauze_totaal en voegt hier bij toe de inhoud uit pauze_begin - time(huidige).
Zodra je het project eindigt vul je met de huidige time() kolom eind_tijd.
Als je het totaal wil berekenen neem je kolom eind_tijd - kolom begin_tijd - kolom pauze_totaal = totaal_tijd
Op deze manier laat het je ook toe om meerdere keren binnen het project/uren telling een pauze te nemen.
Zoiets zou ik doen.
-
09-05-2010, 00:34 #4Particulier
- Berichten
- 394
- Lid sinds
- 15 Jaar
Luuk wat je het beste kan doen is het volgende.
Deze 4 kolommen: begin_tijd, eind_tijd, pauze_begin, pauze_totaal
Zodra je start met het project vul je met de huidige time() kolom begin_tijd.
Zodra je je pauze begint vul je met de huidige time() kolom pauze_begin.
Zodra je je pauze eindigt haal je de inhoud uit kolom pauze_totaal en voegt hier bij toe de inhoud uit pauze_begin - time(huidige).
Zodra je het project eindigt vul je met de huidige time() kolom eind_tijd.
Als je het totaal wil berekenen neem je kolom eind_tijd - kolom begin_tijd - kolom pauze_totaal = totaal_tijd
Op deze manier laat het je ook toe om meerdere keren binnen het project/uren telling een pauze te nemen.
Zoiets zou ik doen.
En wat jij hebt gegeven heb ik al een keer geprobeerd. Sorry hiervoor ;)
-
09-05-2010, 14:02 #5
- Berichten
- 336
- Lid sinds
- 16 Jaar
Luuk maak anders gebruik van php time() en store het niet in een TIME() veld maar in een int type veld. IN je database;)
-
09-05-2010, 14:39 #6
- Berichten
- 330
- Lid sinds
- 17 Jaar
Ik raad je zeker aan om de TIME() in mysql te behouden. Hiermee kan je vele malen meer en het opslaan in de database is vele malen netter.
Wat je kan gebruiken is de TIMEDIFF() functie van mysql (zie http://dev.mysql.com/doc/refman/5.1/...ction_timediff). Als deze functie gebruikt om de tijd tussen de begintijd en eindtijd te berekenen en hier de pauze tijd vanaf haalt (wel eerst converteren naar het juiste formaat (waarschijnlijk seconden)). Dan kan je heel makkelijk met de functie TIME_FORMAT() de tijd converteren naar het gewenste output formaat.
Ik neem aan dat de pauze_tijd een integer is, wat de minuten voorstelt? Dan krijg je dus iets als (niet getest):
Code:SELECT TIME_FORMAT(DATE_ADD(TIMEDIFF(eind_tijd,begin_tijd), - INTERVAL pauze_tijd MINUTE), '%H:%i') AS werktijd
Ps: Wat misschien nog netter is, is om een DATETIME veld te gebruiken, want dan heb je gelijk een overzicht op welke dagen iemand heeft in- en uitgeklokt. Zo kan je mooie overzichten maken. (wat je dan moet doen is in bovenstaand voorbeeld TIME vervangen door DATE. Dan moet het ook werken.Laatst aangepast door Arjen Rademaker : 09-05-2010 om 15:01
-
09-05-2010, 16:39 #7Particulier
- Berichten
- 394
- Lid sinds
- 15 Jaar
Dank je wel! Alleen ik heb pauze tijd ook in een TIME() field. Ik laat de medewerker zijn pauze zo invullen: hh:mm en dan komt het zo in de DB: hh:mm:00. Dus als je 30 minuten pauze hebt gehad, komt het er zo in: 00:30:00. Hoe kan ik dan ook van het tijdverschil tussen begin en eind de pauze tijd ervanaf halen?
Voor de rest heeft dit zeer veel geholpen!
P.S. Ik heb een speciale kolom met de datum ;)
Ik raad je zeker aan om de TIME() in mysql te behouden. Hiermee kan je vele malen meer en het opslaan in de database is vele malen netter.
Wat je kan gebruiken is de TIMEDIFF() functie van mysql (zie http://dev.mysql.com/doc/refman/5.1/...ction_timediff). Als deze functie gebruikt om de tijd tussen de begintijd en eindtijd te berekenen en hier de pauze tijd vanaf haalt (wel eerst converteren naar het juiste formaat (waarschijnlijk seconden)). Dan kan je heel makkelijk met de functie TIME_FORMAT() de tijd converteren naar het gewenste output formaat.
Ik neem aan dat de pauze_tijd een integer is, wat de minuten voorstelt? Dan krijg je dus iets als (niet getest):
Code:SELECT TIME_FORMAT(DATE_ADD(TIMEDIFF(eind_tijd,begin_tijd), - INTERVAL pauze_tijd MINUTE), '%H:%i') AS werktijd
Ps: Wat misschien nog netter is, is om een DATETIME veld te gebruiken, want dan heb je gelijk een overzicht op welke dagen iemand heeft in- en uitgeklokt. Zo kan je mooie overzichten maken. (wat je dan moet doen is in bovenstaand voorbeeld TIME vervangen door DATE. Dan moet het ook werken.
-
09-05-2010, 16:45 #8
- Berichten
- 330
- Lid sinds
- 17 Jaar
Zoiets:
Code:SELECT TIME_FORMAT(SUBTIME(TIMEDIFF(eind_tijd,begin_tijd), pauze_tijd), '%H:%i') AS werktijd
-
09-05-2010, 17:06 #9Particulier
- Berichten
- 394
- Lid sinds
- 15 Jaar
Dank je wel!
-
09-05-2010, 17:58 #10Particulier
- Berichten
- 1.054
- Lid sinds
- 17 Jaar
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic