Gå til innhold

[Løst] sum tid i mysql


Anbefalte innlegg

jeg holder på med og lage meg timeliste .
og jeg trenger litt hjelp til og regne sammen fra DB .

jeg har denne koden . men det kommer ikke ut slik jeg hadde håpet på
den kommer ut slik 15.75 , men skulle hatt den slik at den har hele timer som
16.15 isteden for 15.75
noen som kan hjelpe ?

<?php 
include_once('db.php');

$result = mysql_query('SELECT difference FROM tid'); 
if (mysql_num_rows($result) > 0) { 
 print '<ul>'; 
 $sum = array(); // initialize 
 while ($myrow = mysql_fetch_array($result)) { 
  $sum[] = $myrow['difference']; // sum 
  $salestotal= $myrow['difference']; 
 
 } 
 $sum = array_sum($sum); 
 print "</ul>$sum\n"; 
} else { 
 print "<h1>No results</h1>\n"; 
}
?>
Lenke til kommentar
Videoannonse
Annonse

I databasen lagrer du tidspunktene i ett datetime felt, så bruker du STR_TO_DATE() når du setter inn data

INSERT INTO tid (jobb_start, jobb_slutt)
VALUES(
STR_TO_DATE('14.01.2014 08:00','%d.%m.%Y %H:%i'),
STR_TO_DATE('14.01.2014 16:00','%d.%m.%Y %H:%i')
)
For å formatere dato og tid ut bruker du DATE_FORMAT()

SELECT DATE_FORMAT(jobb_start,'%H:%i %d.%m.%Y') jstart, DATE_FORMAT(jobb_slutt,'%H:%i %d.%m.%Y') jstopp
FROM tid
For å regne ut differansen mellom to tidspunkt bruk TIMESTAMPDIFF()

SELECT TIMESTAMPDIFF(MINUTE,jobb_start,jobb_slutt) arbeidsminutter
FROM tid
Alternativt ta en titt på Datetime

$start = new datetime('14.01.2014 08:00');
$slutt = new datetime('14.01.2014 16:00');

$diff = $slutt->diff($start);
echo 'Jobb tid: '.$diff->h.' timer og '.$diff->i.' minutter';
Endret av Crowly
Lenke til kommentar

mysql_* funksjonene er gamle, du bør ta i bruk mysqli_* eller ta en titt på PDO. http://www.youtube.com/phpacademy har mange gode videoer om slikt.

 

Bør kunne gjøre noe slik

<?php
date_default_timezone_set('Europe/Oslo');

$db = mysqli_connect("localhost","brukernavn","passord","database");

if ($db){
    $sql="SELECT DATE_FORMAT(start_time,'%d.%m.%Y %H:%i') st, DATE_FORMAT(end_time,'%d.%m.%Y %H:%i') et
          FROM tid
          ORDER BY start_time";

    if (false !== ($result = mysqli_query($db, $sql))){
        $total_tid = 0;
        
        while ($row = mysqli_fetch_assoc($result)){
            // beregn differanse i antall sekunder, og legg til i total_tid
            $total_tid += strtotime($row['et']) - strtotime($row['st']);
        }
        
        mysqli_free_result($result);
        
        $timer = floor($total_tid / 3600);
        // trekk fra antall timer
        $total_tid -= $timer * 3600;
        
        $minutter = $total_tid / 60;
        
        echo 'Total arbeids tid er '.$timer.' timer og '.$minutter.' minutter';
    }
    else
        echo 'Feil med database oppslag';
        
    mysqli_close($db);
}
else
    echo 'Feil med tilkobling til databasen';
?>
Alternativt la basen gjør det meste av beregningen

<?php
$db = mysqli_connect("localhost","brukernavn","passord","database");

if ($db){
    $sql="SELECT SUM(TIMESTAMPDIFF(MINUTE,start_time,end_time)) minutter
          FROM tid";

    if (false !== ($result = mysqli_query($db, $sql))){
        $row = mysqli_fetch_assoc($result);
        
        mysqli_free_result($result);
		
        $timer = floor($row['minutter'] / 60);
        $row['minutter'] -= $timer*60;
        
        echo 'Total arbeids tid er '.$timer.' timer og '.$row['minutter'].' minutter';
    }
    else
        echo 'Feil med database oppslag';
        
    mysqli_close($db);
}
else
    echo 'Feil med tilkobling til databasen';
?>
Alternativ 2: Gjør alt i basen

SELECT FLOOR( xminutter /60 ) timer, (xminutter % FLOOR( xminutter /60 )) minutter
FROM (
    SELECT SUM( TIMESTAMPDIFF(MINUTE , start_time, end_time) ) xminutter
    FROM tid
) xtid
Endret av Crowly
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...