Avatar billede freekyzone Nybegynder
10. juni 2003 - 22:56 Der er 9 kommentarer og
1 løsning

tæller (skal tælle op) dato

Jeg skal bruge et script der tæller op fra en bestemt dato.

Ex.

Det er nu 1 år 2 mdr 3 dage 12 timer og 27 min siden ...

fx tælle op fra 28/05 - 2002 kl 10:00
Avatar billede dash Nybegynder
10. juni 2003 - 23:00 #1
kan du ikke sætte en fast start-dato og så hente den nuværende data vha phps getDate funktion http://dk.php.net/manual/en/function.getdate.php

Så kan du udregne den forløbne tid der ud fra.
Avatar billede googolplex Novice
10. juni 2003 - 23:21 #2
function tid_siden($timestamp) {

    $tid = time() - $timestamp;

    $aar = floor($tid / (60*60*24*365));
    $dage = floor(($tid - $aar * (60*60*24*365)) / (60*60*24));
    $timer = floor(($tid - $aar * (60*60*24*365) - $dage * (60*60*24)) / (60*60));
    $minutter = floor(($tid - $aar * (60*60*24*365) - $dage * (60*60*24) - $timer * (60*60)) / 60);
    $sekunder = floor($tid - $aar * (60*60*24*365) - $dage * (60*60*24) - $timer * (60*60) - $minutter * 60);

    echo "Der er gået $aar år, $dage dage, $timer timer, $minutter minutter og $sekunder sekunder";

}

Så skal du bare fodre den med et timestamp fra den tid du vil tælle op fra.
Avatar billede googolplex Novice
10. juni 2003 - 23:23 #3
Den kan sikkert laves nemmere, optimeres, samt sættes lidt pænene op, men det kan du jo rode med :)
Avatar billede nicklasb Nybegynder
10. juni 2003 - 23:23 #4
lavede for et stykke tid siden en funktion til netop det du efterspøger, og sad faktisk og rettede den lidt til i går med forkalring osv. da en af mine venner også skulle bruge en sådan.. se om dette er noget du kan bruge:

<?
function timeago($output, $fromdate, $todate) {

    list ($funcyear, $funcmonth, $funcday, $funchour, $funcminute, $funcsecond) = explode ('-', $fromdate);
    $olddate = mktime($funchour,$funcminute,$funcsecond,$funcmonth,$funcday,$funcyear);
    if ($todate == 'now') {
        $newdate = time();
    } else {
        unset($funcyear, $funcmonth, $funcday, $funchour, $funcminute, $funcsecond);
        list ($funcyear, $funcmonth, $funcday, $funchour, $funcminute, $funcsecond) = explode ('-', $todate);
        $newdate = mktime($funchour,$funcminute,$funcsecond,$funcmonth,$funcday,$funcyear);
    }
    $between = $newdate - $olddate;

    if ($output == 1) {
        $out = $between;
    } elseif ($output == 2) {
        $out = floor( $between / 60 );
    } elseif ($output == 3) {
        $out = floor( $between / ( 3600 ) );
    } elseif ($output == 4) {
        $out = floor( $between / ( 86400 ) );
    } elseif ($output == 5) {
        $out = floor( $between / ( 604800 ) );
    } elseif ($output == 6) {
        $yearsbetween = date('Y',$newdate) - date('Y',$olddate);
        $monthsbetween = date('m',$newdate) - date('m',$olddate) + ( $yearsbetween * 12 );
        if (date('dHis',$newdate) < date('dHis',$olddate)) {
            $out = $monthsbetween - 1;
        } else {
            $out = $monthsbetween;
        }
    } elseif ($output == 7) {
        $yearsbetween = date('Y',$newdate) - date('Y',$olddate);
        if (date('mdHis',$newdate) < date('mdHis',$olddate)) {
            $out = $yearsbetween - 1;
        } else {
            $out = $yearsbetween;
        }
    } elseif ($output == 8) {
        $days = intval($between / 86400);
        $tmp = $between - ($days * 86400);
        $hours = intval($tmp / 3600);
        $tmp = $tmp - ($hours * 3600);
        $minutes = intval($tmp / 60);
        $tmp = $tmp - ($minutes * 60);
        $seconds = $tmp;
   
        $out = $days;
        if ($days == 1) { $out .= ' dag '; } else { $out .= ' dage '; }
        $out .= $hours;
        if ($hours == 1) { $out .= ' time '; } else { $out .= ' timer '; }
        $out .= $minutes;
        if ($minutes == 1) { $out .= ' minut og '; } else { $out .= ' minutter og '; }
        $out .= $seconds;
        if ($seconds == 1) { $out .= ' sekund'; } else { $out .= ' sekunder'; }
    }



    return $out;
}

# ==========================================
# Format ind:
#    1 : Se den ønskede output neden for
#    2 : Format: yyyy-mm-dd-tt-mm-ss
#            eksempel:
#            2003-6-8-12-10-0
#            vil betyde:
#            den 8/6 2003 kl. 12:10:00
#
# Format ud:
#    1 : Sekunder imellem
#    2 : Minutter imellem
#    3 : Timer imellem
#    4 : Dage imellem
#    5 : Uger imellem
#    6 : Måneder imellem
#    7 : År imellem
#    8 : En komplet streng med forksel i
#        alle førnævnte tids-intervaller
#
# ------------------------------------------
# Eksempel:
#
#  -.-.-.-.-.-.-.-.-.-.-.-.-.-.-
#    $timefrom = '2003-6-8-12-10-0';
#    $timeto  = 'now';
#    echo timeago(4,$timefrom,$timeto);
#  -.-.-.-.-.-.-.-.-.-.-.-.-.-.-
#
# Vil udskrive hvor langt tid der er gået
# siden Søndag den 8/6 2003 kl. 12:10:00
# Resultatet bliver selvfølgelig mere
# præcist alt efter hvor lille et tids-
# interval der vælges som output.
# I dette eksempel er der valgt at få det ud
# i dage. Så hvis det i dag er mandag den
# 9/6 2003 (efter klokken 12:10:00), giver
# funktionen 1 dag som resultat.
# ------------------------------------------
#
# Funktionen finder kun forskel på tider,
# TILBAGE  i tiden og til nu. Hvis du ønsker
# at finde et tidsinterval til en foran-
# liggende til, skal der ændres en smule
# i funktionen.
#
# Funktionen kan også finde et tidsinterval
# mellem to foruddifinerede tidsangivelser.
# For at opnå denne funktion skal 'now' blot
# udskiftes med den ønskede tid.
# Sidste tidsangivelse SKAL være den seneste
# ==========================================
?>
Avatar billede freekyzone Nybegynder
11. juni 2003 - 21:07 #5
nicklasb -> hvor skal jeg sætte den dato jeg vil tælle op fra ind henne???
Avatar billede nicklasb Nybegynder
11. juni 2003 - 21:57 #6
har du læst mine comments??

$timefrom = '2003-6-8-12-10-0';
$timeto  = 'now';
echo timeago(4,$timefrom,$timeto);

Der henter du bare din dato ud i $timefrom..
og hvis det er forskel mellem to skriver du bare den anden i $timeto i stedet for 'now'

Prøv at læse hvad der står efter alle #'erne.. det er lidt lettere end at jeg skal skrive det igen..

vil meget gerne hjælpe hvis du har spørgsmål efter det.. :D
Avatar billede nicklasb Nybegynder
11. juni 2003 - 21:58 #7
og så kan du vælge output 8 for at få formateret det som du skrev i spørgsmålet..
altså med dage, timer, minutter og sekunder..
så kommer funktionskaldet til at hedde:
echo timeago(8,$timefrom,$timeto);
Avatar billede freekyzone Nybegynder
12. juni 2003 - 13:00 #8
nicklasb  kom med et svar - pointene er dine

1000-tak for hjælpen...
Avatar billede nicklasb Nybegynder
12. juni 2003 - 13:20 #9
det var da så lidt.. :D
Avatar billede freekyzone Nybegynder
12. juni 2003 - 13:25 #10
Måske lidt for dig ...

- Men MEGA MEGET for mig...

:-)
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

IT-JOB