Toon posts:

[PHP] overuren optellen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi Tweakers,

Ik zet met een vraagstuk binnen PHP.
Voor het werk heb ik een tijd schrijven PHP app gemaakt. Het doel is om je werkuren bij te houden en met name de overuren.

De in tijd, uit tijd, werkuren en extra gewerkte uren worden weggeschreven naar een MySQL database in één tabel.
Nu wil ik de extra gewerkte uren laten optellen als een soort 'saldo', dat je in één oogopslag kunt zien of je teveel of te weinig uren hebt gemaakt en die compenseren.

De werkuren (en het verschil van het aantal roosteruren) worden keurig berekend en weggeschreven in dezelfde regel in de tabel.

Echter kan ik niet een handige manier vinden/bedenken om de extra uren goed te kunnen bereken.
Alle tijden staat in de tabel als type "time" met format 00:00:00 (uren:minuten:seconden).
Alle extra gewerkte uren zijn als 01:30:00 en te weinig gewerkte uren negatief -00:30:00

Afbeeldingslocatie: https://veela.nl/roosterapp/testomgeving/temo1.JPG

Hebben jullie enige tips?

Groet,
Erik

[ Voor 3% gewijzigd door Verwijderd op 13-06-2019 21:10 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • RMX
  • Registratie: Augustus 2000
  • Laatst online: 30-09 19:48

RMX

Ik zou daar gewoon een decimal(10,2) veld van maken, en daar de uren inzetten.
Dus 1,5, en -0,5.

Als je dan een SUM(saldo) doet komt er 1 uit.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zonder te vertellen hoe je tabel er uit ziet is/blijft het gissen natuurlijk. Maar... how about en extra veldje of een record overuren betreft of niet? Dan kun je gewoon "...where overuren = 1" doen.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • exepti0n
  • Registratie: Maart 2008
  • Niet online

exepti0n

_o-

Iets in deze richting?
SQL:
1
2
3
4
SELECT
    SEC_TO_TIME(SUM(TIME_TO_SEC(overuren)))
FROM
    entries

Volvo XC40 SMSR Plus (MY24)


Acties:
  • 0 Henk 'm!

Verwijderd

RMX schreef op donderdag 13 juni 2019 @ 21:10:
Ik zou daar gewoon een decimal(10,2) veld van maken, en daar de uren inzetten.
Dus 1,5, en -0,5.

Als je dan een SUM(saldo) doet komt er 1 uit.
Dat zou ik juist heel erg vermijden. Je kan dan nooit uren en minuten nauwkeurig aangeven en je loopt altijd tegen afrondingsfouten aan.

MySQL kan ook met time, date, timestamp en andere velden werken dus dat zou ik sowieso doen.

Edit:

Voor het daadwerkelijk optellen van overuren hangt het er vanaf hoe je uberhaupt tijd schrijft:

• Aantal uren per dag (8,0 of 8,5 of wat dan ook)
• Tijdsperiode per dag (van 08:00 tot 12:00 ofzo)

En dan hangt het er nog vanaf hoe je het doet met pauzes en lunch en dat soort dingen meer. Dus daar moet je echt meer over vertellen

[ Voor 26% gewijzigd door Verwijderd op 13-06-2019 21:34 ]


Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Inderdaad tijdseenheden gebruiken met seconden en dan later omzetten naar uren en minuten, moet je wel beslissen hoe je minuten af wil ronden. Normaal wordt dat naar beneden afgerond.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:17

Janoz

Moderator Devschuur®

!litemod

Een fout die je maakt is om overal het datatype 'Time' te gebruiken. Time is een moment. time_in en time_out zijn momenten. Working_hours en overuren zijn dat niet. Dat zijn 'Durations' of 'doorlooptijd'. Omdat er in MySQL (afaik) geen duration type is kun je daarvoor beter een ander type gebruiken welke een hoeveelheid aangeeft. Zoals hierboven ook al aangegeven, reken terug naar 1 eenheid en sla dit op in een integer veld. Ikzelf zou voor werktijden niet tot op de seconde precies gaan werken, minuten lijken me meer dan genoeg (alhoewel ik voor mijn eigen systeem zelfs kwartieren aanhoud).


Maar eigenlijk zou ik die beide gegevens helemaal niet in de tabel zetten in eerste instantie. Beiden zijn afgeleide gegevens en deze in de tabel zetten is redundant.

Tot slot heb ik nog een paar vragen. Niet omdat ik het antwoord wil weten ;), maar omdat ik denk dat je jezelf die vragen neit gesteld hebt.

1: Wat doe je met pauzes?
2: Wat wanneer iemand halverwege de dag langs de tandarts gaat?
3: Hoe ga je om met iemand die partime werkt?
4: Als iemand een dag niet komt opdagen, waar staat de -8 uur 'overuren'?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
5 : Wat doe je met afwijkende werktijd dagen, bijv als de baas zegt dat iedereen vanwege kerst / nieuwjaar 2 uur eerder naar huis mag?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor jullie reacties!
Ik heb gistermiddag al even getest met het omrekenen naar seconden.
Dit gaat tot nu aardig goed.

Om antwoord te geven op de aanvullende vragen die worden gesteld:
De gebruikswijze is gebaseerd op een andere applicatie die niet meer wordt gebruikt.
De medewerker is altijd nog zelf verantwoordelijk voor de uren die hij maakt. Als er minder dan het aantal rooster uren wordt gewerkt, resulteert dit in een negatieve tijd.
Het idee is dan dat dit van het saldo wordt afgetrokken.
Als het saldo niet toereikend is, staat dit ook in de min en moet de medewerker dit compenseren.

Kortom, het is een hulpmiddel om de gewerkte tijd bij te houden en blijft gewoon simpel.
Pagina: 1