03. marts 2008 - 14:57
Der er
23 kommentarer og 1 løsning
læg værdi efter en while
hej eksperter. jeg har en while: $a = 0; $i = 0; while ($row = mysql_fetch_array($query)) { $i++; $a++; if($a%2 == 0) { $bgcolor = "#230900"; }else{ $bgcolor = "#230900"; } $id = $row['id']; $dag = $row["dag"]; $start_time = $row["start_time"]; $start_min = $row["start_min"]; if($start_min == "0"){$start_min = "00";} $slut_time = $row["slut_time"]; $slut_min = $row["slut_min"]; if($slut_min == "0"){$slut_min = "00";} $kunde = $row["kunde"]; $ugedag = $row["ugedag"]; $maaned = $row["maaned"]; $hellig = $row["hellig"]; $aar = $row["aar"]; $start = $start_time.$start_min; $slut = $slut_time.$slut_min; $tid = $slut-$start; $samlet = $tid/100; $over = '#666666'; --------------- $samlet giver en værdi (antal timer man har arbejder) regnet ud fra start og slut tidspunkt. Det virker som det skal. nu mangler jeg bare en "timer ialt" efter denne while. Men efter at have rodet lidt rundt i det. må jeg konstatere at jeg ikke lige kan se mig ud af at få de værdier lagt sammen. Så jeg håbede på et lille Ekspert-puf i den rigtige retning :-)
Annonceindlæg tema
03. marts 2008 - 15:44
#1
det skulle gerne blive til en funktion der kan regne normaltid og overtid ud. alt før 08:00 (800) og efter 16:00(1600) skal lægges til overtid. og alt imellem 08:00 (800) og 16:00 (1600) skal lægges til normal tid. og hvis $hellig er lig med 1. skal timer i den linje også lægges til overtiden. håber det giver lidt indblik.
03. marts 2008 - 16:14
#2
Jeg ved ikke helt hvad du mener... mit gæt...: while() { $ialt += $samlet; } echo ialt;
04. marts 2008 - 09:22
#3
lige præcis zynzz =) perfekt. nu mangler den kun at dele normaltid og overtid. min $start og $slut indeholder et start og et slut tidspunkt. det kan være f.eks start=800 slut=1600 den trækker de to tal fra hinanden og så har jeg antal timer. men er værdien højere end 1600 i slut (kl.16.00) skal timer lægges til overtimer. eller er start lavere end 800 (kl.08.00) skal alt op til 800 ligeså lægges til overtid. kun alt imellem 800 og 1600 er normaltid. dvs. jeg skal have en echo på $ialt (normaltimer) og $overtimerialt (overarbejde) var det en bedre forklaring? =)
04. marts 2008 - 16:01
#5
Men jeg prøver at lave noget..., lidt senere...
04. marts 2008 - 18:51
#6
den sætter bare linjer ind i db, med en dato. henter alle linjer hvor $bruger = loginbruger. og sorterer dem på datoen. start og slut tidspunktet er det eneste grundlag i db for udregningen. $start og $slut. lyder rigtig fint hvis du gider bruge lidt tid på det. er yderst taknemmelig =)
06. marts 2008 - 13:09
#7
okay her er en lille update. //henter start og slut og formaterer dem som f.eks 0800 eller 1600 $start_time = $row["start_time"];// start time tal (f.eks: 8) $start_min = $row["start_min"];// start minut tal (f.eks: 30) if($start_min == "0"){$start_min = "00";} // sætter et 0 foran start minut hvis der kun er et. (0800) $slut_time = $row["slut_time"];// slut time tal (f.eks: 16) $slut_min = $row["slut_min"];// slut minut tal (f.eks: 30) if($slut_min == "0"){$slut_min = "00";}// sætter et 0 foran slut minut hvis der kun er et. (1600) //<--- //--> regnestykket <--// $start = $start_time.$start_min;// sætter start timer og start minut sammen til f.eks 0800 $slut = $slut_time.$slut_min;// sætter slut timer og slut minut sammen til f.eks 1600 if ($slut >= 1600){$overtid = $slut-1600;} // hvis slut er større eller lig med 1600 er overtiden lig med slut minus 1600 (1800-1600=200) $samletovertid = $overtid/100;//overtiden den dag er lig med overtid divideret med 100 (200/100=2) $tid = $slut-$start;//tid den dag er slut minus start. (0800-1600=800) $samlet = $tid/100;//timeantal den dag er lig med tid divideret med 100 (800/100=8) $samletnormaltid = $samlet-$samletovertid; // samlet normal arbejdstid den dag er lig med samlet tid minus samket overtid. (9-1=8) $ialtnormal += $samletnormaltid; //lægger alle rækker normaltid sammen $ialtover += $samletovertid; //lægger alle rækker overtid sammen //<--// nu lægger den alt efter 1600 til overtid.
06. marts 2008 - 13:10
#8
men kun indtil 23.59 derefter løber jeg ind i problemer.. plus alt inden kl 0800 stadig skrives på som normaltimer.
06. marts 2008 - 13:20
#9
echo "<span class=\"style3\">Normaltimer ialt: <b>".$ialtnormal."</b> | Overtidstimer ialt: <b>".$ialtover."</b></span><br>";
06. marts 2008 - 15:16
#10
hmm.. jeg har overset en fejl. hvis start er 0800 og slut er 16.59 siger den: normaltimer : 8 overarbejde: 0.59 :-/
06. marts 2008 - 16:16
#11
Undskyld jeg ikke har svaret før nu... jeg har lavet en funktion du kan bruge til ar regne tiden ud...: <? function regnTIDER($startMIN, $startTIME, $slutMIN, $slutTIME, $dag, $maaned, $aar, $helligdag){ $dagUNIX = mktime (0, 0, 0, $maaned, $dag, $aar); // Unixtime for starten af dagen $startUNIX = mktime ($startTIME, $startMIN, 0, $maaned, $dag, $aar); // Unixtime for start af arbejde $slutUNIX = mktime ($slutTIME, $slutMIN, 0, $maaned, $dag, $aar); // Unixtime for slut af arbejde $arbejdsTID = $slutUNIX-$startUNIX; // Finder arbejdstid ialt $startKLOKKEN = 8*3600; // Sekunder til kl. 8 $slutKLOKKEN = 16*3600; // Sekunder til kl. 16 if($helligdag == 1 OR date("w", $dagUNIX) == 0 OR date("w", $dagUNIX) == 6){ // Tjekker om det er en helligdag eller bare lørdag-søndag return "0-". $arbejdsTID; // Tetunere tid } if($helligdag != 1 OR date("w", $dagUNIX) != 0 OR date("w", $dagUNIX) != 6){ // Tjekker om det er en helligdag eller bare lørdag-søndag $overARBEJDEstart = ($dagUNIX+$startKLOKKEN)-$startUNIX; $overARBEJDEslut = $slutUNIX-($dagUNIX+$slutKLOKKEN); $overARBEJDE = $overARBEJDEstart + $overARBEJDEslut; $normalARBEJDE = $arbejdsTID-$overARBEJDE; // Finder normal arbejdstid if($overARBEJDE > 0){ return $normalARBEJDE."-".$overARBEJDE; // Retunere tid } if($overARBEJDE <= 0){ return $normalARBEJDE."-0"; // Retunere tid } } } // Tester lige $startMIN = 0; $startTIME = 8; $slutMIN = 0; $slutTIME = 16; $dag = 3; $maaned = 4; $aar = 2008; $helligdag = 0; echo regnTIDER($startMIN, $startTIME, $slutMIN, $slutTIME, $dag, $maaned, $aar, $helligdag); ?>
06. marts 2008 - 16:21
#12
NB! med denne funktion retunere den det i sekunder, normal timer til venstre og over timer til højre: 100020-2010 fx...
07. marts 2008 - 11:14
#13
Hej zynzz, det ser rigtig godt ud. Men hvis jeg siger f.eks. // Tester lige $startMIN = 0; $startTIME = 8; $slutMIN = 0; $slutTIME = 12; $dag = 3; $maaned = 4; $aar = 2008; $helligdag = 0; returnere den stadig 8 timer? det er sikkert bare mig der ikke lige kan se hvad jeg gør galt
07. marts 2008 - 15:39
#14
Det er en fejl af mig... :) Ret: if($overARBEJDE <= 0){ return $normalARBEJDE."-0"; // Retunere tid } Til: if($overARBEJDE <= 0){ return $arbejdsTID."-0"; // retunere tid }
07. marts 2008 - 15:40
#15
Men tjek lige om der skulle være flere fejl....
08. marts 2008 - 12:00
#16
:) af hvad jeg lige kan se er $arbejdsTID den samlede arbejdstid. Inden koden når at kigge på om der er overarbejde eller helligdag. Det der sker nu er at den returnere alt arbejdet tid som normal tid. Selvom der er sluttet senere end 16 og det er helligdag.
08. marts 2008 - 12:22
#17
Ikke hvis $helligdag er sat til 1
10. marts 2008 - 12:03
#18
Hej zynzz, nu har jeg testet lidt frem og tilbage (undskyld det har taget så lang tid). men jeg har fundet en fejl. kan lige prøve at sætte det op: hvis du siger du arbejder fra 7-16 viser den : 28800-3600 (8-1) det er rigtigt. men hvis du arbejder fra 7-15 viser den : 28800-0 (8-0) det er forkert. Fordi alt før 8 er også overarbejde. så den skulle vise (7-1). ellers virker det perfekt =)
12. marts 2008 - 08:20
#19
Hej Zynzz, hvis du ikke lige kan se hvad der er galt med det. Må du gerne ligge et svar.
12. marts 2008 - 17:02
#20
Jeg skal nok lige rette det, men bliver nok lidt senere.. okay ?
13. marts 2008 - 08:48
#21
Tusind tak zynzz :-) pragtfuldt der findes menesker som dig :D
15. marts 2008 - 12:27
#22
hey, undskyld jeg ikke har svaret før nu..., jeg har smækket noget hurtig sammen: ret: $overARBEJDE = $overARBEJDEstart + $overARBEJDEslut; til: if($overARBEJDEstart <= 0 && $overARBEJDEslut <= 0){ $overARBEJDE = 0; } if($overARBEJDEstart <= 0 && $overARBEJDEslut > 0){ $overARBEJDE = $overARBEJDEslut; } if($overARBEJDEstart > 0 && $overARBEJDEslut <= 0){ $overARBEJDE = $overARBEJDEstart; } if($overARBEJDEstart > 0 && $overARBEJDEslut > 0){ $overARBEJDE = $overARBEJDEstart + $overARBEJDEslut; }
22. april 2008 - 14:13
#23
Hej zynzz, Jeg beklager virkelig jeg ikke har været tilstede i tråden før nu. Du skal være hjertens velkommen til at ligge et svar så vi kan få afsluttet. Og så vender jeg evt. tilbage i en ny tråd senere. Tak for alt dit arbejde =)
22. april 2008 - 16:22
#24
svar så.. :D
Vi tilbyder markedets bedste kurser inden for webudvikling