Avatar billede neve Nybegynder
17. juli 2012 - 18:37 Der er 10 kommentarer og
1 løsning

udregne antal år fra en unix_timestamp

jeg skal lave en funktion der kan tælle hvor mange hele år der er gået siden en bestemt dato, datoen er en unix time stamp.
er der nogen der har en simpel funktion til det ?

på forhånd tak :-)
Avatar billede DeeDawg Nybegynder
17. juli 2012 - 18:56 #1
Følgende burde give dig hvad du ønsker. Ikke testet dog. :)

function getYearDiff($timestamp) {
    $diff = abs(time() - $timestamp);
    return floor($diff / (365*60*60*24));
}
Avatar billede DeeDawg Nybegynder
17. juli 2012 - 18:57 #2
Det skal dog siges, at den data der bliver givet til funktionen bør valideres først. :)
Avatar billede nyhuus Nybegynder
17. juli 2012 - 19:34 #3
function getYearDiff($timestamp) {
    if(is_numeric($timestamp) AND strlen($timestamp) == 11)
        $inputYear = date"Y", $timestamp);
        $thisYear = date("Y", time());
        $yearDiff = $thisYear - $inputYear;
    }
    else {
        $yearDiff = $timestamp . " is not a valid timestamp";
    }
    return $yearDiff
}

Dette er heller ikke testet, men skulle virke, og tester om inputtet er et tal, samt om det er 11 ciffere langt.
Avatar billede olebole Juniormester
17. juli 2012 - 20:41 #4
<ole>

@nyhuusdk: Din første betingelse holder ikke. Et UNIX timestamp kan bestå af 1 til 10 ciffre  =)

/mvh
</bole>
Avatar billede DeeDawg Nybegynder
17. juli 2012 - 20:56 #5
Derudover holder det heller ikke kun at trække de 2 årstal fra hinanden. Giver et forkert resultat hvis ikke dag og måned er de samme for begge datoer, og det kan man vist ikke ligefrem regne med at de er. :)
Avatar billede olebole Juniormester
17. juli 2012 - 21:07 #6
Ja, man kan hurtigt komme ud i, at 'Vær velkommen Herrens år' beregnes til at tage et helt år. Jeg tror ikke, jeg ville kunne tåle at bade i champagne og kransekage et helt år  *D
Avatar billede nyhuus Nybegynder
17. juli 2012 - 22:03 #7
olebole: Det var jeg faktisk ikke klar over, jeg var af den overbevisning at det skulle bestå af 11 ciffere :) men den er nu nem at fjerne.

Dog er den lidt mere trickey den som DeeDawg kommer med, hvilket selvføldig er rigtigt, det havde jeg ikke lige tænkt over i farten.


Så glem min funktion ;)
Avatar billede neve Nybegynder
18. juli 2012 - 09:48 #8
Hej alle

Takker for alle svarende og forsøgene :-)

DeeDawg din løsning virker fint, funktionen passer lige ind, og ja jeg laver et vald tjek inden. :-)
Avatar billede neve Nybegynder
18. juli 2012 - 09:48 #9
smid et svar så kviterer jeg :-)
Avatar billede DeeDawg Nybegynder
18. juli 2012 - 10:56 #10
Det var så lidt. :)
Avatar billede olebole Juniormester
18. juli 2012 - 16:39 #11
#7: Et UNIX timestamp er et tal, som udgør det antal sekunder, der er gået fra 1. jan. 1970 kl. 00.00.00. Så et timestamp for den dato kl. 5 sekunder over midnat, er simpelthen 5  =)

Til gengæld rækker et UNIX timestamp kun til 2038. Hvis man regner lidt på det (at teste er simplere), vil man opdage, at tallet aldrig når mere end 10 ciffre.

Så fik du lidt forklaring på, hvorfor. Og den der 'tankefisk' med årene ... den kunne vi zq alle have lavet i et 'inspireret øjeblik'  *o)
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