Avatar billede heyn Nybegynder
03. oktober 2005 - 10:04 Der er 9 kommentarer og
1 løsning

Beregning af tidsforskel - 2 små opgaver

I min MySQL database har jeg 2 timestamps 'opret' og 'slut'. Jeg henter dem i strengformatet 'yyyy-mm-dd hh:mm:ss' (hvilket er meget praktisk i mit tilfælde). Nu vil jeg i mit php-script gerne beregne tidsforskellen 'nu' - 'start', og 'slut' - 'start' og få resultatet i timer og minutter. Den kan jeg med mit ringe vid ikke klare!
Desuden har jeg brug for at beregne tidsforskellen således at weekend ikke regnes med.

Mvh Christian
Avatar billede leif Seniormester
03. oktober 2005 - 10:18 #1
$opret = strtotime($row[′opret′]);
$slut = strtotime($row[′slut′]);
$diff_in_seconds = ($slut - $opret);
$diff_in_hours = ($diff_in_seconds / (60 * 60));

Så får tiden, dvs. hvis du vil have den i timer, kan du udskrive $diff_in_hours
Avatar billede leif Seniormester
03. oktober 2005 - 10:21 #2
Dvs. hvis der imellem de 2 dage har været lørdag og søndag så skal der fratrækkes 48 timer ?
Avatar billede heyn Nybegynder
03. oktober 2005 - 10:52 #3
Hvad er forståelsen af '&#8242'?
Findes der mulighed for at bestemme hvilken dag i ugen start er (i tal 1 - 7) således at man kan lave en formel for beregningen af timer (og dage).
Det skal måske nævnes at jeg ikke foretager mine beregninger direkte ud fra data fra databesen (altså row['..'] men fra nogle værdier der ligger i samme klasse som funktionen der skal beregner tidsforskellen. Jeg har altså tidligere foretaget
$et_objekt->opret = $row['opret'];

Christian
Avatar billede leif Seniormester
03. oktober 2005 - 10:57 #4
&#8242 er '

Ved ikke lige hvad der skete.

$row['opret'] kan du bare skifte ud med den variabel som du nu har.
Avatar billede heyn Nybegynder
03. oktober 2005 - 11:22 #5
Mange tak skal du have.
Så var der lige den med dagnr. i ugen (man - søn i tal) . Hvis man har start til slut = 11 dage og ikke ønsker weekend medregnet så er det ikke ligegyldigt om 'start' er en mandag el. en fredag.
Beregningen er nem nok hvis man kender dagsnummeret i ugen.
Christian
Avatar billede heyn Nybegynder
03. oktober 2005 - 12:09 #6
Undskyld Leif
Man kan også spørge for meget for hurtigt - Denne gang var php-manualen for 'date()' faktisk til at forstå. date('l',TIDSPUNKT)
Tak for hjælpen - Her er dine point.
God frokost fra Christian
Avatar billede heyn Nybegynder
03. oktober 2005 - 12:12 #7
Nu er den da helt gal med mig - ('w',TIDSPUNKT)
Avatar billede hmortensen Nybegynder
03. oktober 2005 - 12:13 #8
date("w") giver dags nr.

Hvis jeg har forstået dig korrekt burde du kunne bruge det her:
function DiffWOWeekend($start_dato, $slut_dato)
{
    $start = strtotime($start_dato);
    $slut = strtotime($slut_dato);
    $diff = $slut - $start;

    for ($x = $start; $x < $slut; $x += 86400)
    {
        if (in_array(date("w", $x), array(0, 1)))
            $diff -= 86400;
    }
    return ($diff / (60 * 60 * 24));
}
Avatar billede heyn Nybegynder
03. oktober 2005 - 16:13 #9
Undskyld hmortensen
Nu fik jeg nærlæst dit forslag - godt 'svar' - mange tak
Christian
Avatar billede heyn Nybegynder
25. oktober 2005 - 09:26 #10
Hej hmortensen
En lille rettelse:  if (in_array(date("w", $x), array(0, 6)))
Hej fra Christian
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