Avatar billede andsvel Nybegynder
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 :-)
Avatar billede andsvel Nybegynder
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.
Avatar billede zynzz Praktikant
03. marts 2008 - 16:14 #2
Jeg ved ikke helt hvad du mener... mit gæt...:

while() {
$ialt += $samlet;
}
echo ialt;
Avatar billede andsvel Nybegynder
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? =)
Avatar billede zynzz Praktikant
04. marts 2008 - 16:01 #4
Hvis det var mig ville jeg bruge funktionen mktime() - http://dk2.php.net/manual/da/function.mktime.php ville nok gøre det meget nemmere...

Må jeg spørge om hvordan visningen foregår... ? pr. uge ?
Avatar billede zynzz Praktikant
04. marts 2008 - 16:01 #5
Men jeg prøver at lave noget..., lidt senere...
Avatar billede andsvel Nybegynder
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 =)
Avatar billede andsvel Nybegynder
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.
Avatar billede andsvel Nybegynder
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.
Avatar billede andsvel Nybegynder
06. marts 2008 - 13:20 #9
echo "<span class=\"style3\">Normaltimer ialt:&nbsp;<b>".$ialtnormal."</b>&nbsp;|&nbsp;Overtidstimer ialt:&nbsp;<b>".$ialtover."</b></span><br>";
Avatar billede andsvel Nybegynder
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

:-/
Avatar billede zynzz Praktikant
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);
?>
Avatar billede zynzz Praktikant
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...
Avatar billede andsvel Nybegynder
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
Avatar billede zynzz Praktikant
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
}
Avatar billede zynzz Praktikant
07. marts 2008 - 15:40 #15
Men tjek lige om der skulle være flere fejl....
Avatar billede andsvel Nybegynder
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.
Avatar billede zynzz Praktikant
08. marts 2008 - 12:22 #17
Ikke hvis $helligdag er sat til 1
Avatar billede andsvel Nybegynder
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 =)
Avatar billede andsvel Nybegynder
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.
Avatar billede zynzz Praktikant
12. marts 2008 - 17:02 #20
Jeg skal nok lige rette det, men bliver nok lidt senere.. okay ?
Avatar billede andsvel Nybegynder
13. marts 2008 - 08:48 #21
Tusind tak zynzz :-) pragtfuldt der findes menesker som dig :D
Avatar billede zynzz Praktikant
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;
}
Avatar billede andsvel Nybegynder
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 =)
Avatar billede zynzz Praktikant
22. april 2008 - 16:22 #24
svar så.. :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester