Sven Rautenberg: Falsche Zeitberechnung??

Beitrag lesen

Moin, du einer!

#Tageszaehler
for($daycount=0;$daycount<=6;$daycount++)
{
    $wochentag = show_wochentag($daycount);

#Liest alle Batcheinträge des angegebenen Tages ein (von der betroffenen Person)
        $select = "select date_format(date_add('$wochenstart_datum', interval $daycount day),'%Y-%m-%d') as datum";
        my($tmp) = $dbh->prepare($select);
        $tmp->execute();
        $hash_tmp =  $tmp->fetchrow_hashref;
        $tages_dat = $hash_tmp->{datum};

#Tagesname wird aus Unterfunktion gerufen und ausgegeben
        $tagesname = show_tagname($daycount);
        print "</tr>";

Tipp: Zeilenanfang einer Tabelle mit <tr>. :)

print "<td>$tag_name</td>";

#Batcheinträge anzeigen
        my($sth) = $dbh->prepare("select * from batch where pers_id = $personen_id and batch_datum = '$tages_dat' order by batch_zeit");
        $sth->execute();
        $maxrow = 0;

while($hash_eintraege = $sth->fetchrow_hashref)
        {
  print "<td>$hash_eintraege->{batch_zeit}</td>";
  $maxrow++;

if($maxrow%2 != 0)
  {
    ($h,$m,$s) = split(/:/,$hash_eintraege->{batch_zeit});
    $ein =0;

Diese Zuweisung ist redundant. $ein wird eine Zeile weiter unten zugewiesen.

$ein = $h*3600+$m*60+$s;
  }
  else
  {
     ($h,$m,$s) = split(/:/,$hash_eintraege->{batch_zeit});
            $aus = 0;

redundant...

$aus = $h*3600+$m*60+$s;

Wurde $diff irgendwo initialisiert?

$diff = $diff+$aus-$ein;

}
  $tag_total = $tag_total+$diff;

Wurde $tag_total mal irgendwo initialisiert? Jedenfalls nicht in diesem Bereich, den du gepostet hast. Abgesehen davon: In $diff steht doch schon das Tagestotal drin.
Entsprechend wären die nachfolgenden Umrechnungen anzupassen.

}

#Tagestotal berechnen und ausgeben
$stunde = "".int($tag_total/3600)."";
$minute = "".int(($tag_total-($stunde*3600))/60)."";
  $sekunde = "".int(($tag_total-($stunde*3600)-($minute*60)))."";
        $wochentotal += $tag_total;
        $tag_total = 0;
        zeitformat();
    $zeit = "$stunde:$minute:$sekunde";
    $stunde = 0;
    $minute = 0;
    $sekunde = 0;

print "<td bgcolor = #99CCFF><li>$zeit</td>";
        print "</tr>";
        $zeit =0;
}

Generallösung: Ganz am Anfang des Scripts
use strict;

Dann wirst du gezwungen, deine Variablen alle zu definieren. Undefinierte Variablen (mit irgendwelchen Speicherresten als Wert) werden nicht mehr genommen.

- Sven Rautenberg