Avatar billede fancy Mester
06. februar 2010 - 12:11 Der er 4 kommentarer og
1 løsning

Tælle timer sammen

Jeg har lavet dette men er gået i stå  da jeg ikke kan finde ud af hvordan jeg skal gøre hvis det er halve timer eller minutter det jeg har laver kan kun klare hele timer.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<?php

include("connect.php");

function hours_diff($time1, $time2) {
        $hour1 = explode(":", $time1);
        $hour2 = explode(":", $time2);

        if($hour1[0] > $hour2[0])
                return (24-$hour1[0]) + $hour2[0];

        return $hour2[0] - $hour1[0];
}



$query_rsForening = "SELECT kid, Kommet, Forening, Til, Fra FROM vagtplan_2009_ WHERE kid !=0 AND Kommet = 1 ORDER BY Forening"; $rsForening = mysql_query($query_rsForening) or die(mysql_error());

$tempForening = "";
$antalTimer = 0;

while($row_rsForening = mysql_fetch_array($rsForening)) {

    if($tempForening == "") { //første gang
        $tempForening = $row_rsForening['Forening'];
    }
    else if($tempForening != $row_rsForening['Forening']) { //der er fundet en ny forening
      echo "<br> <center>";
        echo $tempForening;
        echo "<br>";
        echo " Antal timer: ";
        echo $antalTimer;
        echo "<br><br>";
        $tempForening = $row_rsForening['Forening'];
        $antalTimer = 0;
    }

    //tæl antal timer for forening.
    $antalTimer = $antalTimer +
hours_diff($row_rsForening['Fra'],$row_rsForening['Til']);
}

//udskriv allersidste forening
echo $tempForening . " Antal timer: " . $antalTimer;

?>

   
<body>
</body>
</html>
<br /><br /><br />
<a href="find.php">Tilbage </a>
Avatar billede repox Seniormester
06. februar 2010 - 13:09 #1
Du kan få et hint, som du måske kan bruge til at lave din 'tæller' om?

en time varer 60 minutter.
Delt op i 100 (som er nemmest at regne med) svarer 1 minut til 0,6.
0,25 timer er således:
0,6 * 25 = 15 minutter
0,6 * 175 = 105 minutter
Avatar billede showsource Seniormester
06. februar 2010 - 13:14 #2
Du kan også gemme tiden som TIME i din tabel, eller nok bedre, DATETIME
Og derefter bruge
SELECT TIMEDIFF(til,fra) as timerialt FROM tabel

Det bedste du kan, er ihvertfald at bruge et standard mysql tid-felt
06. februar 2010 - 16:45 #3
fancy, supplementerende til de oevrige indlaeg og maaske mere konkret til dit spoergsmaal: Jeg kan forstaa fra din kode at datatypen for 'Fra' og 'Til' er TIME, snarere end DATETIME og at det er tilstraekkeligt til dit formaal.  Det kan ske at vaerdien af "Til' er lavere end vaerdien af 'Fra' hvis perioden gaar natten over, men det kan ikke ske at perioden er laengere end 24 timer.  Formaalet med din kode er saa at taelle perioder op per forening.

Du er ikke tilfreds med at taelle op hele timer.  Hvad vil du saa have?  Minutter?  Det faar du ved at aendre din funktion saaledes at den ikke kun bruger $hour1[0] men ogsaa $hour1[1] og tilsvarende ved $hour2.  Efter eventuelt at have foroeget timetallet i til med 24 beregner du en $tid som 60 * timeforskellen plus minutforskellen, og saa returnerer du $tid.  Saaledes:

function hours_diff($time1, $time2)
{
        $hour1 = explode(":", $time1);
        $hour2 = explode(":", $time2);

        if($hour1[0] > $hour2[0]) $hour2[0] = $hour2[0] + 24;
        $tid = ($hour2[0] - $hour1[0]) * 60 + $hour2[1] - $hour1[1];
        return $tid;
}

Du vil saa nok rette navnene paa funktionen og variable saa de reflekterer de nye realiteter.
Avatar billede fancy Mester
06. februar 2010 - 23:11 #4
Ja hvor svært kan det være, men jeg var gået kold, jeg har kun tilpasset lidt så jeg har det i hele timer
function hours_diff($time1, $time2)
{
        $hour1 = explode(":", $time1);
        $hour2 = explode(":", $time2);

        if($hour1[0] > $hour2[0]) $hour2[0] = $hour2[0] + 24;
        $tid = ($hour2[0] - $hour1[0]) * 60 + $hour2[1] - $hour1[1];
        return $tid/60;
}

Christian_Belgien
læg et svar
07. februar 2010 - 04:53 #5
Her er mig svar.
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