Avatar billede walkie84 Nybegynder
16. februar 2011 - 15:48 Der er 3 kommentarer og
1 løsning

strtotime - en lille udfordring

Hej alle,

Jeg har nedenstående function som udregner hvor lang tid der er gået siden et givent tidspunkt og udskriver det i sekunder, minutter, timer, dage alt efter hvor lang tid.

Den har virket, men af en eller anden årsag gør den det ikke nu og jeg kan simpelthen ikke finde fejlen.

Datoen som jeg udtrækker fra databasen er i dette format: 2010-07-23 11:33:43
Og det virker fint hvis jeg laver f.eks.
echo strtotime("2010-07-23 11:33:43");



På forhånd tak

Morten


<?php

include("news/config.php");

// START: Funktion visTid
function visTid($tidspunkt) {
    $date1 = strtotime($tidspunkt);
    $date2 = time();
    $d = $date2 - $date1;
    if ($d < 60)
    return $d." sekund".(($d==1)?'':'er')." siden";
    else
    {
        $d = floor($d / 60);
        if($d < 60)
        return $d." minut".(($d==1)?'':'ter')." siden";
        else
        {
            $d = floor($d / 60);
            if($d < 24)
            return $d." time".(($d==1)?'':'r')." siden";
            else
            {
                $d = floor($d / 24);
                if($d < 7)
                return $d." dag".(($d==1)?'':'e')." siden";
                else
                {
                    $d = floor($d / 7);
                    if($d < 4)
                    return $d." uge".(($d==1)?'':'r')." siden";
                }//Uge
            }//Dag
        }//Time
    }//Minut
}
// SLUT: Funktion visTid


$result = mysql_query("SELECT * FROM news WHERE newsid = '1'") or die(mysql_error());
$row = mysql_fetch_array($result);

visTid($row['dtime']);

?>
Avatar billede scootergrisen Nybegynder
16. februar 2011 - 17:47 #1
Det fordi datoen "2010-07-23 11:33:43" er 29 uger siden og din kode viser kun det som er sket indenfor de sidste 4 uger :

if($d < 4)
return $d." uge".(($d==1)?'':'r')." siden";

Fjern linien "if($d < 4)" så skulle det virke.
Avatar billede walkie84 Nybegynder
17. februar 2011 - 08:33 #2
Dooh, ja det er selvfølgelig derfor! Jeg troede jeg var ved at blive sindssyg :)

Hvad vil være mest hensigtsmæssigt at gøre, når datoen bliver så gammel - istedet for at den skriver f.eks. "29 uger siden"?
Synes du jeg skal lave en for måneder og år også?
Avatar billede scootergrisen Nybegynder
17. februar 2011 - 08:41 #3
Ja det bedre at lave en med måneder og år syns jeg men ved ik lige hvordan fordi man kan jo ikke sige at et bestemt antal uger er 1 måned.

Men ellers kan du jo bare skrive Cirka 1 måned siden hvis det er 4 uger siden hvis det alligvel ikke gør noget at det ikke er præcist.
Avatar billede walkie84 Nybegynder
17. februar 2011 - 08:54 #4
Det var det samme jeg tænkte, at man så kunne sige at 4 uger er en måned..

Men så tænkte jeg at når en nyhed er så gammel, så gør det jo ikke så meget - derfor har jeg lavet nedenstående som så bare udskriver datoen hvis den er ældre end 4 uger :)

if($d < 4)
return $d." uge".(($d==1)?'':'r')." siden";
else
{
    $tidspunkt = date("d/m-Y", $date1);
    return $tidspunkt;
}//Ældre


Tusind tak for hjælpen!
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