8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)
  • Q:
    Bijdrager
    digi-nl

    [PHP/MYSQL] Rekenen met datum

    Op dit moment ben ik bezig met een uren registratie systeempje.
    Nu is het de bedoeling dat bij elk project het totale aantal uren te zien is.

    Op dit moment heb ik de database zo

    Het is de bedoeling dat als er een hele boel items in staan dat er dan een totaal komt.

    Hoe kan ik zorgen dat alle tijd die in “uren” staat bij elkaar opgeteld worden?

    Bvd,
    Loran

    Bijdrager
    levidhuyvetter

    Bijdrager
    Thoomas

    Ik heb hem nog niet getest, maar lukt het zo?:

    <br />
    <?php<br />
    $sql = "SELECT uren FROM databasetabel";<br />
    $query = mysql_query($sql);<br />
    while($rij = mysql_fetch_object($query)) {<br />
    	$uren = $rij->uren;<br />
    	$urentotaal += date("G", $uren) + (date("i", $uren)/60); // G = uren en i/60 = minuten, dus 7:30 min. wordt 7.5 min.<br />
    }<br />
    echo "Totaal aantal uur: ".$urentotaal;<br />
    ?><br />
     
    Bijdrager
    digi-nl

    Ik heb nu dit:

    <br />
    <?php<br />
    $sql = "SELECT * FROM uren"; </p>
    <p>if(!$res = mysql_query($sql))<br />
    {<br />
        trigger_error(mysql_error().'<br />In query: '.$sql);<br />
    }<br />
    elseif(mysql_num_rows($res) == 0)<br />
    {<br />
        echo 'Geen resultaten gevonden';<br />
    }<br />
    else<br />
    {<br />
    $urentotaal = '0';<br />
    	while($row = mysql_fetch_object($res))<br />
    	{<br />
    		$uren = $row->uren;<br />
    		$urentotaal += date("G", $uren) + (date("i", $uren)/60); // G = uren en i/60 = minuten, dus 7:30 min. wordt 7.5 min.<br />
    	}<br />
    echo "Totaal aantal uur: ".$urentotaal;<br />
    }<br />
    ?><br />
     

    Alleen dan krijg ik een error:

    <br />
    Notice: A non well formed numeric value encountered in /www/uren/pgs/uren.php on line 24<br />
    Notice: A non well formed numeric value encountered in /www/uren/pgs/uren.php on line 24<br />
     

    Regel 24 is: “$urentotaal += date(“G”, $uren) + (date(“i”, $uren)/60);”

    Bijdrager
    Thoomas

    Ah, excuses, ik was nog iets vergeten.

    $uren = $row->uren;

    moet zijn:
    $uren = strtotime($row->uren);

    Dat houdt in dat hij de tijd eerst naar een UNIX-formaat omzet.

    In totaal krijg je dus dit:

    <br />
    $sql = "SELECT * FROM databasetotaal";<br />
    if(!$res = mysql_query($sql))<br />
    {<br />
        trigger_error(mysql_error().'<br />
    In query: '.$sql);<br />
    }<br />
    elseif(mysql_num_rows($res) == 0)<br />
    {<br />
        echo 'Geen resultaten gevonden';<br />
    }<br />
    else<br />
    {<br />
    $urentotaal = '0';<br />
    while($row = mysql_fetch_object($res))<br />
    {<br />
    $uren = strtotime($row->uren);<br />
    $urentotaal += date("G", $uren) + (date("i", $uren)/60); // G = uren en i/60 = minuten, dus 7:30 min. wordt 7.5 min.<br />
    }<br />
    echo "Totaal aantal uur: ".$urentotaal;<br />
    }<br />
     

    Ik heb de code nu even getest met een test-database, en hier werkt het. Bij jou nu ook?

    Bijdrager
    martijnG

    SQL kan zelf prima rekenen, zo jammer om dat door php te laten doen. Calculaties vanuit SQL zijn ook veel sneller. Helaas heb ik nu geen tijd om een voorbeeld te geven.

    Bijdrager
    qazwsxedc

    Via MySQL rekenen kan inderdaad ook. Via PHP is het handigste om de kolom uren te splitsen naar uren, minuten en seconden en in een loopje deze op te tellen:

    <?php

    $sql = “SELECT uren FROM tabelnaam;”;
    $result = mysql_query($sql);
    $totaal = 0;

    while($row = mysql_fetch_array($result)) {
    $uren = explode(‘:’, $row[‘uren’]);
    $totaal += ((int)$uren[0] + ((int)$uren[1]) / 60 + ((int)$uren[2]) / 3600);
    }

    echo ‘Aantal uren: ‘ . $totaal;

    edit: waardeloze forumsoftware. Dan maar zonder code tags. :angry:

    Lid
    Pepperonie
    martijnG op 06 april 2011

    SQL kan zelf prima rekenen, zo jammer om dat door php te laten doen. Calculaties vanuit SQL zijn ook veel sneller. Helaas heb ik nu geen tijd om een voorbeeld te geven.

    Dat is inderdaad de manier.

    Mocht je aantal uren willen weten per project:
    SELECT project, SUM(uren) AS urentotaal FROM tabel GROUPED BY project;

    Of gewoon alle uren totaal:
    SELECT SUM(uren) AS urentotaal FROM tabel;

8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.