slippern Skrevet 18. september 2008 Del Skrevet 18. september 2008 driver å programmerer en time liste Står fast når det gjelder hvor mye overtid brukeren har jobbet. La oss si at brukeren har 7,5timers arbeidsdag til vanlig men jobber overtid av og til.. og han jobber fra 08:00:00 til 15:30:00 til vanlig men visst brukeren jobber til 18:00:00 så får han overtid. Og ja. jeg teller med sekundene. Hvor mye overtid har da brukeren? I formatet 00:00:00 Lenke til kommentar
funkyboy Skrevet 18. september 2008 Del Skrevet 18. september 2008 driver å programmerer en time listeStår fast når det gjelder hvor mye overtid brukeren har jobbet. La oss si at brukeren har 7,5timers arbeidsdag til vanlig men jobber overtid av og til.. og han jobber fra 08:00:00 til 15:30:00 til vanlig men visst brukeren jobber til 18:00:00 så får han overtid. Og ja. jeg teller med sekundene. Hvor mye overtid har da brukeren? I formatet 00:00:00 Du benytter time() til dette, håper jeg? Eller altså timestamp? Lenke til kommentar
slippern Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 bruker timestamp() ja Lenke til kommentar
funkyboy Skrevet 18. september 2008 Del Skrevet 18. september 2008 bruker timestamp() ja Nice! Da er det jo bare trekke fra tidspunktet brukeren kom på jobb fra timestampen som bestemmer nåværende tidspunkt (eller eventuelt innskrevet slutt- tidspunkt). Dersom dette er over antall sekunder som tilsvarer ordinær arbeidstid, vil dette bli regnet som overtid. time() og date() lar deg regne til og fra timestamp. Lenke til kommentar
slippern Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 Ja. så langt har jeg og komment. men ikke lengere. Lenke til kommentar
funkyboy Skrevet 18. september 2008 Del Skrevet 18. september 2008 Ja. så langt har jeg og komment. men ikke lengere. Da får du $overtid i riktig format (02:30:00) ved å skrive (sett at du har overtid): $tid_paa_arbeid = $sluttTidspunkt - $startTidspunkt; $overtid = date('G:i:s', $tid_paa_arbeid); Lenke til kommentar
slippern Skrevet 19. september 2008 Forfatter Del Skrevet 19. september 2008 Prøvde denne her $TilEksisterende = '2008-09-15 16:00:00'; $FraEksisterende = '2008-09-15 08:00:00'; Splitter disse to variablene opp sånn at jeg sitter igjen med klokkeslettet. Når jeg da prøver $tid_paa_arbeid = "$timer:$minutter:$sekunder" - "$timer2:$minutter2:$sekunder2" ; $overtid = date('G:i:s', $tid_paa_arbeid); echo $overtid; så får jeg 0:59:52 til svar.. $content = substr ( $FraEksisterende, 10, 20 ); $date = "$content"; list ( $timer, $minutter, $sekunder ) = split ( '[:]', $date ); $content = substr ( $TilEksisterende, 10, 20 ); $date = "$content"; list ( $timer2, $minutter2, $sekunder2 ) = split ( '[:]', $date ); $tid_paa_arbeid = "$timer:$minutter:$sekunder" - "$timer2:$minutter2:$sekunder2"; $overtid = date('G:i:s', $tid_paa_arbeid); echo $overtid; Lenke til kommentar
funkyboy Skrevet 19. september 2008 Del Skrevet 19. september 2008 $tid_paa_arbeid = "$timer:$minutter:$sekunder" - "$timer2:$minutter2:$sekunder2"; Du regner her med (format) 00:00:00 - 00:00:00, noe som ikke gir deg riktig resultat. Du vil heller ønske å jobbe med noe ala (format) 1234567 - 1225567 som da vil si at du sitter igjen med 9000 sekunder (2,5 time). Lenke til kommentar
slippern Skrevet 19. september 2008 Forfatter Del Skrevet 19. september 2008 $FraEksisterende = '2008-09-15 08:00:00'; $TilEksisterende = '2008-09-15 16:00:00'; $startTidspunkt = mktime($FraEksisterende); $sluttTidspunkt = mktime($TilEksisterende); $tid_paa_arbeid = $sluttTidspunkt - $startTidspunkt; $overtid = date ( 'G:i:s', $tid_paa_arbeid ); echo $overtid; fikk nå 1:00:00 som svar.. skal være 00:30:00 Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 19. september 2008 Del Skrevet 19. september 2008 Hadde du tatt en echo $start og echo $slutt, så ville du sett at de har samme verdi. Da kan man begynne å grave litt, og finne ut hvorfor. Dette er ganske elementær debugging (finne ut verdi av variabler, og finne ut hvorfor de ikke har forventet verdi), og jeg håper du tar til deg akkurat dette. For å gjøre det litt lettere for deg så skal jeg si hva som er galt med en gang: Du bruker helt gale parametere til mktime(). mktime() skal ikke ha en lang streng med dato, men tar opptil 7 enkle parametere. Du kan f.eks. bruke substr() eller explode() (og/eller en kombinasjon av disse) for å dele opp til- og fra-datoene dine til et sett med variabler, og så sende det inn i mktime(). Lykke til :o) Les om hvordan funksjonen brukes i PHP-manualen her: http://no2.php.net/mktime Lenke til kommentar
slippern Skrevet 22. september 2008 Forfatter Del Skrevet 22. september 2008 (endret) Har nå delt opp $FraEksisterende og $TilEksisterende $FraEksisterende = '2008-09-15 08:00:00'; $TilEksisterende = '2008-09-15 16:00:00'; // Deler opp $FraEksisterende $FraSekunder = substr ( "$FraEksisterende", - 2 ); $FraMinutter = substr ( "$FraEksisterende", - 5, 2 ); $FraTimer = substr ( "$FraEksisterende", - 8, 2 ); $FraDag = substr ( "$FraEksisterende", - 11, 2 ); $FraManed = substr ( "$FraEksisterende", - 14, 2 ); $FraAr = substr ( "$FraEksisterende", - 19, 4 ); echo "$FraDag, $FraManed, $FraAr. $FraTimer, $FraMinutter, $FraSekunder <br />"; // Deler opp $TilEksisterende $TilSekunder = substr ( "$TilEksisterende", - 2 ); $TilMinutter = substr ( "$TilEksisterende", - 5, 2 ); $TilTimer = substr ( "$TilEksisterende", - 8, 2 ); $TilDag = substr ( "$TilEksisterende", - 11, 2 ); $TilManed = substr ( "$TilEksisterende", - 14, 2 ); $TilAr = substr ( "$TilEksisterende", - 19, 4 ); echo "$TilDag, $TilManed, $TilAr. $TilTimer, $TilMinutter, $TilSekunder <br />"; $StartTidspunkt = mktime ( $FraTimer, $FraMinutter, $FraSekunder, $FraManed, $FraDag, $FraAr ); echo $StartTidspunkt; echo "<br />"; $SluttTidspunkt = mktime ( $TilTimer, $TilMinutter, $TilSekunder, $TilManed, $TilDag, $TilAr ); echo $SluttTidspunkt; echo "<br />"; $Overtiden = $SluttTidspunkt - $StartTidspunkt; $overtid = date ( 'G:i:s', $Overtiden ); echo $overtid; men når blir echo $overtid -> 9:00:00 Endret 22. september 2008 av slippern Lenke til kommentar
stiber Skrevet 22. september 2008 Del Skrevet 22. september 2008 Vil bare tipse om strtotime som gir timestamp direkte fra dato som '2008-09-15 08:00:00'. Lenke til kommentar
slippern Skrevet 22. september 2008 Forfatter Del Skrevet 22. september 2008 $FraEksisterende = '2008-09-15 08:00:00'; $TilEksisterende = '2008-09-15 16:00:00'; $FraEksisterende = strtotime($FraEksisterende); $TilEksisterende = strtotime($TilEksisterende); $StartTidspunkt = $FraEksisterende; echo $StartTidspunkt; echo "<br />"; $SluttTidspunkt = $TilEksisterende; echo $SluttTidspunkt; echo "<br />"; $Overtiden = $SluttTidspunkt - $StartTidspunkt; echo $Overtiden; echo "<br />"; $overtid = date ( 'G:i:s', $Overtiden ); echo $overtid; echo $Overtiden; -> 28800 echo $overtid; -> 9:00:00 Lenke til kommentar
stiber Skrevet 22. september 2008 Del Skrevet 22. september 2008 Ettersom det jeg kan se, så har du ikke tatt høyde for hva som er normal arbeidstid i den koden der... Du har bare regnet ut total arbeidstid. Lenke til kommentar
slippern Skrevet 22. september 2008 Forfatter Del Skrevet 22. september 2008 $FraEksisterende = '2008-09-15 08:00:00'; $TilEksisterende = '2008-09-15 16:00:00'; $FraEksisterende = strtotime ( $FraEksisterende ); $TilEksisterende = strtotime ( $TilEksisterende ); $StartTidspunkt = $FraEksisterende; $SluttTidspunkt = $TilEksisterende; $Overtiden = $SluttTidspunkt - $StartTidspunkt; $ArbeidsDag = 7.5 * 60 * 60; $Overtiden = $Overtiden - $ArbeidsDag; $overtid = date ( 'H:i:s', $Overtiden ); echo $overtid; Får 1:30:00 i $Overtiden ligger det 1800.. 1800/60 = 30. Så hvorfor den legge til 1time det vet jeg ikke. Lenke til kommentar
stiber Skrevet 22. september 2008 Del Skrevet 22. september 2008 Du Har muligens noe tull med tiddsone-instillingen. Forsøk å bruke gmdate() eller lek med timezone funksjonene. Lenke til kommentar
Jonas Skrevet 22. september 2008 Del Skrevet 22. september 2008 Eventuelt kan du lage din egen funksjon for å vise tids-intervaler, så er du ikke så avhengig av å være i riktig tidssone. Jeg ser hvertfall to slike på php.net. (Se etter distanceOfTimeInWords) Lenke til kommentar
slippern Skrevet 23. september 2008 Forfatter Del Skrevet 23. september 2008 Da var det fikset. brukte gmdate() Lenke til kommentar
qualbeen Skrevet 25. september 2008 Del Skrevet 25. september 2008 hvis du ikke gidder å regne på det, kan du jo ta en strtotime($arbeidslutt) og strtotime($arbeidsstart). Differansen er antall sekunder. Men strtotime er glad i litt mer input enn kun klokkeslett; f.eks. en dato. Les mer på php.net. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå