Vise alder med time() ?

En tråd i 'PHP, SQL og databaser' startet av Mr Vest, 29 Nov 2009.

  1. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Jeg vet ikke om jeg muligens har klart og drite meg litt ut. Nå er det jo slik at time() viser antall sekunder fra 01.01.1970.

    Når en bruker registrerer seg på mitt nettsted har jeg 3 selectbokser hvor de velger dato, mnd og år. Straks de sender inn skjemaet gjør jeg om verdien fra disse tre boksene til antall sekunder fra 01.01.1970 med mktime(). Deretter tenkte jeg altså og vise hvor gammel disse folka er ved hjelp av resultatet mktime() har gitt meg.

    Uhm... (flau over meg selv), Hva gjør jeg når gamlingene over 39år registrerer seg?
     
  2. Thomas Pedersen

    Thomas Pedersen Pornogründer

    Innlegg:
    632
    lagre heller det tallet som date i databasen.
     
  3. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Mener du full dato som f.eks 10101987 eller mener du at jeg skal legge det opp i et slikt datetime felt? Hva kan jeg da bruke for å regne ut alderen?
     
  4. Thomas Pedersen

    Thomas Pedersen Pornogründer

    Innlegg:
    632
    i mysql kan du enten velge datatype date, eller datetime. Det går an å sortere på disse feltene. Du vil ikke kunne sortere på et varchar felt der du lagrer datoen som en string.

    når du henter ut datoen kan du i php bruke $timestamp = strtotime($dato) for å få datoen om til en timestamp igjen. og bruk den til å regne ut alderen.

    og en timestamp får du om til dato ved å bruke date('Y-m-d H:i:s',$timestamp);
     
  5. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Hmm. Jeg har noen slike greier som time() gir meg lagret i varchar-felt, som jeg da bruker date() for å gjøre om til dato og det funker supert, men om jeg ikke burde gjøre det slik i denne situasjonen så er det virkelig bra du sier ifra.

    Men denne løsninga vil vel kun fortelle meg fødselsdatoen? Vil det da holde at jeg tar dato,år i dag minus dato,år de er født for å vise alderen, eller er jeg langt ute på jordet?
     
  6. Thomas Pedersen

    Thomas Pedersen Pornogründer

    Innlegg:
    632
    lagre datoen i et date felt. i formatet YYYY-MM-DD

    Ikke bruk varchar felt eller timestamp.

    når du skal vise alderen på siden, bruker du en funksjon som gjør dato om til alder. f.eks. denne:

    PHP:
        function age($date){
            
    $timestamp strtotime($date);
            
    $diffYear  date('Y') - date('Y'$timestamp);
            
    $diffMonth date('n') - date('n'$timestamp);
            
    $diffDay   date('j') - date('j'$timestamp);
            if(
    $diffMonth || ($diffMonth == && $diffDay 0)) {
                
    $diffYear--;
            }
            return 
    $diffYear;
        }  
     
    Tonny Kluften liker dette.
  7. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Takker så mye. Nå vet jeg hvertfall hvordan jeg skal ta den biten der når jeg kommer til den. Kjempebra. Ryktepoeng kommer når jeg får lov å gi deg ryktepoeng. :)
     
  8. Zolic Medlem

    Innlegg:
    52
    vil vel være enklere å ta:
    Kode:
    microtime()-$mktimeStapemenDuHarLagretiDBen
    Det tallet du da får ut kan du benytte i date() og formatere som du selv vil...
     
    Mr Vest liker dette.
  9. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Det var jo gjerne også noe ja. Microtime må sies og være en funksjon jeg ikke har giddet å lese noe om. Lurer på om årsak kan være at jeg ikke liker mat som er varmet opp i mikrobølgeovn noe særlig. Jeg bruker nok den løsninga Zolic. Ryktepoeng gitt. :)
     

Del denne siden