Avatar billede Slettet bruger
18. juni 2007 - 02:17 Der er 12 kommentarer og
1 løsning

tid mellem 2 datoet

hej jeg har lavet et log system hvor jeg registrer 2 datoer med tid og dato

altså logon  = 18-06-07 06:30

og    logOut = 18-06-07 20:30

det jeg gerne ville kunne var at at beregne total timer ud og og deledem op i timer mellem

06:00-15:00, 15:00-22:00 og 22:00-06:00

i tre input felter så jeg kan poste dem i min db

Pleas hjælp mig:)
Avatar billede jakobdo Ekspert
18. juni 2007 - 07:55 #2
Avatar billede jweber Nybegynder
18. juni 2007 - 09:03 #3
tiden mellem to tidspunkter kan du finde med mktime:

$totaltid = mktime(20, 30, 0, 06, 18, 2007) - mktime(06, 30, 0, 06, 18, 2007);

Hvis du vil have det ud i timer i stedet for sekunder er det bare at regne det om:

$timer = $totaltid/60/60;
Avatar billede Slettet bruger
18. juni 2007 - 23:53 #4
at få total tid er ikke mit problem, problemet er netop at få total tiden delt op, på de tre tidspunkter
Avatar billede jakobdo Ekspert
19. juni 2007 - 07:48 #5
Hvad hvis login er: 15-06-07 06:30 og logud er: 19-06-07 07:46 ?
Skal den også putte det i de rigtige båse?
Avatar billede Slettet bruger
19. juni 2007 - 07:53 #6
login og logud strækker sig kun over 24 timer så man kan starte en 18 og slutte den 19, det er til et vakt skema jeg arbejder på
Avatar billede Slettet bruger
19. juni 2007 - 08:04 #7
så hvis du starter 18-06-2007 22:30 og slutter 19-06-2007 07:00

er der 8.5 timer... 7.5 timer i input feltet 22:00-06:00 og 1 time i input feltet 06:00-15:00
Avatar billede jakobdo Ekspert
19. juni 2007 - 22:06 #8
Det kan nok laves smartere, men damn jeg har slidt i det! :o)

Prøv lige denne kode:

<?php
//http://www.eksperten.dk/spm/783664

$interval = array(
                                        array('start_time' => '06:00:00', 'start_day' => 0, 'end_time' => '15:00:00', 'end_day' => 0),
                                        array('start_time' => '15:00:00', 'start_day' => 0, 'end_time' => '22:00:00', 'end_day' => 0),
                                        array('start_time' => '22:00:00', 'start_day' => 0, 'end_time' => '06:00:00', 'end_day' => 1)
                                    );

$hours    = array();

$start_time = '18-06-2007 22:30:00';
$end_time  = '19-06-2007 17:00:00';

$start_unix = strtotime($start_time);
$end_unix  = strtotime($end_time);

$start_date = getdate($start_unix);
$end_date  = getdate($end_unix);

echo 'Tiden vi regner p&aring; er:<br />';
echo 'Start: ' . $start_time . '<br />';
echo 'End: ' . $end_time . '<hr />';

foreach($interval AS $array)
{
    $start_start = strtotime(($start_date['mday']+$array['start_day']).'-'.$start_date['mon'].'-'.$start_date['year'].' '.$array['start_time']);
    $start_end  = strtotime(($start_date['mday']+$array['end_day']).'-'.$start_date['mon'].'-'.$start_date['year'].' '.$array['end_time']);
   
    if($start_unix > $start_start && $start_unix < $start_end)
    {
        if($end_unix > $start_end)
        {
            echo $array['start_time'] . '-' . $array['end_time'] . ' : ' . (($start_end - $start_unix)/3600) . ' Timer<br />';
        }
        else
        {
            echo $array['start_time'] . '-' . $array['end_time'] . ' : ' . (($end_unix - $start_unix)/3600) . ' Timer<br />';
        }
    }
    elseif($start_unix < $start_start && $end_unix > $start_end)
    {
        echo $array['start_time'] . '-' . $array['end_time'] . ' : ' . (($end_start - $start_start)/3600) . ' Timer<br />';
    }
}

foreach($interval AS $array)
{
    $end_start  = strtotime(($end_date['mday']+$array['start_day']).'-'.$end_date['mon'].'-'.$end_date['year'].' '.$array['start_time']);
    $end_end    = strtotime(($end_date['mday']+$array['end_day']).'-'.$end_date['mon'].'-'.$end_date['year'].' '.$array['end_time']);
   
    if($end_unix > $end_start && $end_unix < $end_end)
    {
        if($start_unix > $end_start)
        {
            echo $array['start_time'] . '-' . $array['end_time'] . ' : ' . (($end_unix - $start_unix)/3600) . ' Timer<br />';
        }
        else
        {
            echo $array['start_time'] . '-' . $array['end_time'] . ' : ' . (($end_unix - $end_start)/3600) . ' Timer<br />';
        }
    }
    elseif($start_unix < $end_start && $end_unix > $end_end)
    {
        echo $array['start_time'] . '-' . $array['end_time'] . ' : ' . (($end_end - $end_start)/3600) . ' Timer<br />';
    }
}

?>
Avatar billede jakobdo Ekspert
19. juni 2007 - 22:07 #9
Du kan se koden i aktion her: http://www.codebreaker.dk/exp/783664exp.php
Avatar billede Slettet bruger
19. juni 2007 - 23:48 #10
okay NICE mange tak, men hvordan giver jeg dig point??? jakobdo
Avatar billede jakobdo Ekspert
20. juni 2007 - 07:15 #11
Svar!
Avatar billede jakobdo Ekspert
20. juni 2007 - 07:15 #12
Og så acceptere du bare mit svar herover. (eller i bunden) :o)
Avatar billede jakobdo Ekspert
20. juni 2007 - 08:13 #13
Takker for point.
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