[PHP] Tidspunkt - "x minutter siden"

[PHP] Tidspunkt - "x minutter siden"

Innleggav iatros » man 03.03.2008 7:29

Ønsker å vise tidspunktet på kommentarer som er lagt inn på artikler/anmeldelser på disse måtene:
Eksempler:
"1 minutt siden"
"23 minutter siden"
"2 timer siden"
"17 timer siden"
"igår"
"2 dager siden..."

Poster som er eldre enn to dager vises med dato og klokkeslett.
Dato er registrert i mysql som unix timestamp.

Noen som har noen tips om hvordan jeg kan få kodet dette?

Brukerens avatar
medlem i 232 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav ak » man 03.03.2008 7:48

Kode: Merk alt
function timeDiffToString($timestamp) {
  $diff = time() - $timestamp;
  if($diff < 60) {
    return "1 minutt siden";
  } else if($diff < 3600) {
    return  ($diff / 60)." minutter siden";
  } else if($diff < 24*3600) {
    return ($diff / 3600) . " timer siden";
  } else if($diff < 48*3600) {
    return "i går";
  } else {
    return ($diff / 24*3600) . " dager siden";
  }
}


Som du fort finner ut er det et par gramatiske hull der, eksempelvis "1 timer siden"

Administrator
Brukerens avatar
medlem i 236 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav weaver » tir 04.03.2008 18:57

pent! tror jeg låner den ;)

Brukerens avatar
medlem i 194 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav iatros » tir 04.03.2008 19:07

Jepp, nydelig. Tusen takk for hjelpen :D

Brukerens avatar
medlem i 232 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav mikaelb » tir 04.03.2008 19:15

Denne linjen

Kode: Merk alt
return ($diff 3600) . " timer siden";
 


Kan endres til f.eks

Kode: Merk alt
return ($diff 3600) . " time" . (($diff 3600) == '' 'r') .  siden";


Litt stygt å se på, men siden resten av funksjonen skulle være så kompakt, tenkte jeg at jeg skulle holde den slik.

Brukerens avatar
medlem i 207 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav ak » tir 04.03.2008 19:18

mikaelb:

Skill det heller ut som en ekstra if (paa innsiden av den andre).

Hva skjer etter 3601 sekunder?

Administrator
Brukerens avatar
medlem i 236 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav iatros » tir 04.03.2008 20:53

ak skrev:Skill det heller ut som en ekstra if (paa innsiden av den andre).


Hvordan blir koden seende ut da? (Jepp, jeg er amatør ;))

Brukerens avatar
medlem i 232 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav ak » tir 04.03.2008 21:03

Kode: Merk alt
if($diff < 24*3600) {
    return ($diff / 3600) . " timer siden";
}


til

Kode: Merk alt
if($diff < 24*3600) {
    $diff = $diff / 3600;
    if(diff == 1) {
        return $diff . " time siden";
    } else {
        return $diff. " timer siden";
    }
}

Administrator
Brukerens avatar
medlem i 236 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav weaver » ons 05.03.2008 14:11

Denne gjør det iatros faktisk ønsket:

Kode: Merk alt
    function timeUnixToDate($timestamp) {
        $t = intval($timestamp);
        $s = "kl ".date("H:i d.m.y",$t);
        return $s;
    }

    function timeDiffToString($timestamp) {
        $diff = time() - $timestamp;
        if($diff < 60) {
            return "1 minutt siden";
        } else if($diff < 3600) {
            return  round(($diff / 60))." minutter siden";
        } else if($diff < 24*3600) {
            $tid = round(($diff / 3600));
            if ($tid > 1) {
                $ending = "r";
            }
            return $tid." time".$ending." siden";
        } else if($diff < 48*3600) {
            return "i g&aring;r";
        } else if($digg < 96*3600){
            return round(($diff / 24*3600)) . " dager siden";
        } else {
            $nor = timeUnixToDate($digg);
            return $nor;
        }
    }

Brukerens avatar
medlem i 194 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav weaver » tor 06.03.2008 23:31

eek! En liten glipp. Linje 22 skal være:
Kode: Merk alt
return round($diff / (24*3600)) . " dager siden";

Brukerens avatar
medlem i 194 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav fraggalot » tor 09.10.2008 12:00

Hvis du ønsker deg en funksjon som kan levere uker, måneder og år også i nøyaktig format skrev jeg en for lenge siden.

Funksjonen timediff() tar variabelen $date som skal være et UNIX TIMESTAMP for eksempel fra når en post ble skrevet i et forum (dette får du med UNIX_TIMESTAMP i mysql eller time() funksjonen til php). Den andre variabelen, $quantity, er hvor langt svar du vil ha, eks "1d 2h" eller "2w 4d 5h 4min".

Kode: Merk alt
<?
// timediff(timestamp[,how big])
   /**
    * @param date       UNIX_TIMESTAMP
    * @param quantity    INT, number of atts->out
    * @return       STR, agostr->out
    **/

    function timediff($date,$quantity=2) {
   //get time difference
        $diff = time() - $date;
       
        //getting how long ago its all been
        $y_ago  = date("Y", $diff) -1970;
        $mo_ago = date("m", $diff) -1;
        $d_ago  = date("d", $diff) -1;
        $h_ago  = date("H", $diff);
        $mi_ago = date("i", $diff);
        $s_ago  = date("s", $diff);

        //create w_ago from d_ago
        if($d_ago >= 7) {
            $w_ago = floor($d_ago/7);
            $d_ago -= ($w_ago*7);
        } else {
            $w_ago = 0;
        }

        //create array containing ago_vars
        $foo_array = array ("y" => $y_ago, "mo" => $mo_ago, "w" => $w_ago, "d" => $d_ago, "h" => $h_ago, "m" => $mi_ago, "s" => $s_ago);

        $i = 0;
        foreach($foo_array as $key=>$value) {
            $value = ereg_replace("0+","0",$value);
            if($value != 0 && $i < $quantity) {
                $str .= (isset($str)) ? ", $key:$value" : "$key:$value";
                $i++;     
            }
        }

        //in $str there are now 1 or more ago_vars
        $str = (strpos($str,",") !== false) ? explode(",", $str) : array($str);
   
        $moo = array();
        foreach($str as $string) {
            preg_match("/(.*):(.*)$/", $string,$match);
            $string2 = trim($match[2])." ";
            $string2 = preg_replace("/^0(.+)/","\\1",$string2);
            $keyname = trim($match[1]);
            $string2 .= $keyname;
            array_push($moo, str_replace(" ","",$string2));
        }

        $final = ($moo[1] !== false) ? implode("",$moo) : $final;
        return $final;
    }

//eksempler for å vise bruk.
$stamp = 1066065981;
print '1: '.timediff($stamp,1).'<br />';
print '2: '.timediff($stamp).'<br />';
print '3: '.timediff($stamp,3).'<br />';
print '4: '.timediff($stamp,4).'<br />';
print '5: '.timediff($stamp,5).'<br />';
print '6: '.timediff($stamp,6).'<br />';
print '7: '.timediff($stamp,7).'<br />';
?>
medlem i 197 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav kentivar » ons 08.04.2009 0:21

Jeg driver og lager en side og trenger litt hjelp.

Jeg skal lage et script som kjøres som en cronjob og sjekker bruker tabeller for brukere som ikke har vært logget på iløpet av 30 dager siden siste innlogging, så sender den en epost og minner brukeren på det, og om han ikke logger inn iløpet av x antall dager etter at eposten ble sendt så blir kontoen slettet.

i databasen blir lastLogin lagret i formatet DDMMYYYYHHMM.
Hvordan kan jeg lage et script som regner ut differansen av lastLogin med dagens dato og klokkeslett og gir det ut som et array med years => "", months => "", days => "", hours => "", minuttes => "".

Noen flinke hjerner her som kan hjelpe meg litt?
medlem i 199 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav fraggalot » ons 08.04.2009 10:49

Latskap, forrige svar gjør jo nøyaktig det ;) Men her har du det iallefall..

Du bruker mktime(time, minutt, sekund, måned, dag, år) for å gjøre om datoen din til unix timestamp. - http://no2.php.net/mktime

Da kan du finne differansen fra i dag med:
$diff = time() - $date;

Videre finner du hvor mange måneder og dager m.fl. med:
$mo_ago = date("m", $diff) -1;
$d_ago = date("d", $diff) -1;
$h_ago = date("H", $diff);
$mi_ago = date("i", $diff);
$s_ago = date("s", $diff);

//hvis over 3 måneder
if($mo_ago >= 3) {
//gjør something something..
} else {
//eller noe annet..
}



kentivar skrev:Jeg driver og lager en side og trenger litt hjelp.

Jeg skal lage et script som kjøres som en cronjob og sjekker bruker tabeller for brukere som ikke har vært logget på iløpet av 30 dager siden siste innlogging, så sender den en epost og minner brukeren på det, og om han ikke logger inn iløpet av x antall dager etter at eposten ble sendt så blir kontoen slettet.

i databasen blir lastLogin lagret i formatet DDMMYYYYHHMM.
Hvordan kan jeg lage et script som regner ut differansen av lastLogin med dagens dato og klokkeslett og gir det ut som et array med years => "", months => "", days => "", hours => "", minuttes => "".

Noen flinke hjerner her som kan hjelpe meg litt?
medlem i 197 måneder
 

Re: [PHP] Tidspunkt - "x minutter siden"

Innleggav kentivar » ons 08.04.2009 17:06

fraggalot skrev:Latskap, forrige svar gjør jo nøyaktig det ;)


Helt korrekt :p
Jeg så det etter jeg postet, sorry. Men takk uansett :)
medlem i 199 måneder
 


Returner til PHP



Hvem er i Forumene

Registrerte brukere: Ingen registrerte brukere