Hvordan beregner jeg løn

Tags:    sql php mysql

Hejsa.

Jeg er ved at lave et lille system hvor man kan indtaste sine arbejdstider og sin timeløn. Ud fra dette laver den så en liste med de dage du arbejder og hvad løn du kan forvente at få.

I min database har jeg info om start og slut tidspunkt for arbejdet.
Selve lønsatsen/timesatsen har jeg blot stående pt. (Den skal senere gemmes i min user tabel).

Jeg har fået lavet min sql så den beregner tidsforskellen mellem start og slut. Så det er ikke det mit problem er.

Spørgsmål 1
Problemet kommer når jeg skal beregne lønnen, altså gange timerne med satsen.
Men jeg skal vel have omskrevet tiden så den i stedet for at hedde 8:45 så den kommer til at hedde 8,75. Hvordan gør jeg det i php?

Spørgsmål 2
Dernæst kommer så kan jeg lave sådan at der i et bestemt tidsrum skal gives et tillæg. fx fra 17-18 gives der normalsats+tillæg1(tid*sats+tid*tillæg), 18-19 gives der normalsats+tillæg2 (tid*sats+tid*tillæg) og 19-20 gives der normalsats+tillæg3 (tid*sats+tid*tillæg).
Tillæget skal ganges ud på den arbejdstid der er i tidsrummet?





Indlæg senest redigeret d. 20.03.2012 20:04 af Bruger #15663
4 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 7 karma
Sorter efter stemmer Sorter efter dato
Spørgsmål 1:

Del teksten. Minutter divides med 60, så har du det i hundrede dele. Plus timer + minutter.

Fold kodeboks ind/udPHP kode 


Spørgsmål 2:

Kan du smide den kode du bruger til, at udtrække arbejdstiden for en dag? Det er nok lettere at bygge videre på den.
Edit: kan se du har postet noget sql i en anden tråd. Jeg kigger på det og vender tilbage.

Såfremt dine starttidspunkter er timestamps og de hedder fra og til, så kan dette være et udgangspunkt:

Fold kodeboks ind/udSQL kode 


Hvis TillaegX har en positiv værdi, angiver værdien hvor lang tid du har arbejdet indenfor den angivne periode.



Indlæg senest redigeret d. 20.03.2012 20:50 af Bruger #955
Vi er kun interesseret i tiden brugt mellem 17 og 18. Hvis vi starter med at kigge på sluttidspunktet, som vi kalder TIL. Hvis TIL er efter kl 18, så må vi korte den den til kl 18:

IF((TIME(TIL)>'18:00:00'),'18:00:00',TIME(TIL))
Hvis tidsdelen af til er over 18, så returnere 18:00:00, ellers returner tidsdelen af til

Det samme gør vi med FRA:
IF((TIME(FRA)<'17:00:00'),'17:00:00',TIME(FRA))
Hvis tidsdelen af FRA er under 17, så returner 17:00:00, ellers returner tidsdelen af fra

Når vi så har afgrænset vores værdier, tager vi differencen af dem.

TIME() bliver brugt til at "konvertere" dato/tid til tid.

Prøv evt at se på denne lidt grafiske forklaring.
http://tinypic.com/r/o5dy50/5



Hej Stefan.

Det er super lækkert det du har skrevet.
Kunne nok få det til at fungere.
Fatter bare ikke hvad der sker og det ville jo være lækkert hvis jeg skal bruge det på et andet tidspunkt.



Jeg er nød til at omsætte det til noget data jeg har, for jeg forstår det bare ikke. Og jeg er ved at få grå hår af det.

Lad os nu antage at jeg har en arbejdstid fra 16.15 - 19.15.
fra kl 17.45 - 19.15 ligges der et tillæg på 24,45 pr. time (her 1,5 timer). og om søndagen skal der foruden timelønnen ligges 51,23 pr time.
Hvordan omsætter jeg det? (tillæg og satsløn bliver smidt ind i user tabellen).

Sidespørgsmål:
Jeg skal have samlet sammen så den beregner en sum af beløbet og arbejdstiden fra den 20 - 20 (fx fra 20. jan - 20. feb).
Hvordan gør jeg det?
Den må gerne tilføje det som en ekstra row i min tabel.
Koden er pt denne:
Fold kodeboks ind/udPHP kode 


Jeg skal også gerne have fratrukket pauserne. Dem vil jeg ligge ind i tabellen (work_schedule), da disse ikke altid kan overholdes og derfor kan variere. Men hvilket format skal jeg gøre det i (VARCHAR, TIMESTAMP)?




Indlæg senest redigeret d. 20.03.2012 22:06 af Bruger #15663
t