slippern Skrevet 18. september 2008 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
funkyboy Skrevet 18. september 2008 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?
funkyboy Skrevet 18. september 2008 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.
slippern Skrevet 18. september 2008 Forfatter Skrevet 18. september 2008 Ja. så langt har jeg og komment. men ikke lengere.
funkyboy Skrevet 18. september 2008 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);
slippern Skrevet 19. september 2008 Forfatter 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;
funkyboy Skrevet 19. september 2008 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).
slippern Skrevet 19. september 2008 Forfatter 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
Gjest Slettet-rXRozPkg Skrevet 19. september 2008 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
slippern Skrevet 22. september 2008 Forfatter 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
stiber Skrevet 22. september 2008 Skrevet 22. september 2008 Vil bare tipse om strtotime som gir timestamp direkte fra dato som '2008-09-15 08:00:00'.
slippern Skrevet 22. september 2008 Forfatter 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
stiber Skrevet 22. september 2008 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.
slippern Skrevet 22. september 2008 Forfatter 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.
stiber Skrevet 22. september 2008 Skrevet 22. september 2008 Du Har muligens noe tull med tiddsone-instillingen. Forsøk å bruke gmdate() eller lek med timezone funksjonene.
Jonas Skrevet 22. september 2008 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)
slippern Skrevet 23. september 2008 Forfatter Skrevet 23. september 2008 Da var det fikset. brukte gmdate()
qualbeen Skrevet 25. september 2008 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.
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å