Avatar billede kinnaj Nybegynder
26. november 2009 - 11:49 Der er 9 kommentarer

Beregn tid

Hej,

Hvis jeg nu har to klokkeslæt fx 10:41 og 14:37 - hvordan regner jeg så ud hvor mange timer - minutter der er derimellem ?

:)

Håber i kan hjælpe..
Avatar billede preppydude Nybegynder
26. november 2009 - 11:59 #1
<?php
function timeago($start,$end,$rcs = 0) {
    $dif  = $end-$start;
    $pds  = array('second','minute','hour','day','week','month','year','decade');
    $lngh  = array(1,60,3600,86400,604800,2630880,31570560,315705600);
    for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = ($dif%$lngh[$v]);
   
    $no = floor($no); if($no <> 1) $pds[$v] .='s'; $x=sprintf("%d %s ",$no,$pds[$v]);
    if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) $x .= time_ago($_tm);
    return $x;
}

print(timeago(strtotime("10:41"), strtotime("14:37")));
?>
Avatar billede kinnaj Nybegynder
26. november 2009 - 12:29 #2
Perfeeeeeekt! Lige nu udskriver den kun timer, hvordan får jeg også minutterne med?
Avatar billede showsource Seniormester
26. november 2009 - 14:06 #3
Hvis nu du har gang i en mysql:

SELECT TIMEDIFF('10:41:00','10:37:00')

Husk blot at begge tider SKAL ha' samme format
Avatar billede kinnaj Nybegynder
26. november 2009 - 14:14 #4
Hej Showsource,

Jeg benytter desværre ikke MySQL - kan php ikke beregne det?
Avatar billede preppydude Nybegynder
26. november 2009 - 14:20 #5
Hvis du vil have præcise tidspunkter kan du bruge den her i stedet for timeago:

<?php
function timeago($start,$end,$rcs = 0) {
    $dif  = $end-$start;
    $pds  = array('second','minute','hour','day','week','month','year','decade');
    $lngh  = array(1,60,3600,86400,604800,2630880,31570560,315705600);
    for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = ($dif%$lngh[$v]);
   
    $no = floor($no); if($no <> 1) $pds[$v] .='s'; $x=sprintf("%d %s ",$no,$pds[$v]);
    if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) $x .= time_ago($_tm);
    return $x;
}
/**
* A function for making time periods readable
*
* @author      Aidan Lister <aidan@php.net>
* @version    2.0.0
* @link        http://aidanlister.com/2004/04/making-time-periods-readable/
* @param      int    number of seconds elapsed
* @param      string  which time periods to display
* @param      bool    whether to show zero time periods
*/
function time_duration($seconds, $use = null, $zeros = false)
{
    // Define time periods
    $periods = array (
        'years'    => 31556926,
        'Months'    => 2629743,
        'weeks'    => 604800,
        'days'      => 86400,
        'hours'    => 3600,
        'minutes'  => 60,
        'seconds'  => 1
        );

    // Break into periods
    $seconds = (float) $seconds;
    foreach ($periods as $period => $value) {
        if ($use && strpos($use, $period[0]) === false) {
            continue;
        }
        $count = floor($seconds / $value);
        if ($count == 0 && !$zeros) {
            continue;
        }
        $segments[strtolower($period)] = $count;
        $seconds = $seconds % $value;
    }

    // Build the string
    foreach ($segments as $key => $value) {
        $segment_name = substr($key, 0, -1);
        $segment = $value . ' ' . $segment_name;
        if ($value != 1) {
            $segment .= 's';
        }
        $array[] = $segment;
    }

    $str = implode(', ', $array);
    return $str;
}


printf("<strong>Cirka</strong> %s<br /><strong>Præcist</strong> %s", timeago(strtotime("10:41"), strtotime("14:37")), time_duration(strtotime("14:37")-strtotime("10:41")));
?>
Avatar billede preppydude Nybegynder
26. november 2009 - 14:22 #6
@showsource:
Dig og dit SQL. :D Det må da belaste SQL serveren af helvedes til hvis man kører et stort site og nægter at køre de ting man kan i PHP... :b
Avatar billede showsource Seniormester
26. november 2009 - 14:51 #7
Afhænger jo af lidt og hvert.
Men henter du tiden fra DB, burde det nu ikke gøre nogen forskel.

Bruger forresten iøvrigt dette her på en side:

function timer($var) {
$h = floor($var/3600);

    if($h < 1) {
    $m = ceil($var/60);
    }else{
    $m = ceil((($var-(3600*$h))/60));
    }

    if ($m > 0) {
    $m = make_zero($m) ." min.";
    }else{
    $m = "";
    }

return make_zero($h) ." tim. ". $m;

}

function make_zero($var) {

    if(strlen($var) == 1 && $var !=0) {
    $var = "0". $var;
    }
return $var;

}

echo timer(6578);
Avatar billede preppydude Nybegynder
26. november 2009 - 15:03 #8
Tænkte bare at det var hurtigere at gøre det rent i PHP end at PHP skal kontakte SQL serveren, bede den om at gøre det, få svar og så skal man håndtere det svar i PHP også. :b
Avatar billede netexpose Nybegynder
26. november 2009 - 18:11 #9
Havde samme problemstilling i går.

Faldt over denne: http://www.phpclasses.org/browse/package/1952.html

Så var det ikke sværere end at bruge nedenstående (udskift selvfølgelig selv dato):

$time_object = new SimpleDateTimeObject();
$time_span = $time_object->diff_MySQL('2008-07-27 00:00:00');

print_r($time_span);
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