Gå til innhold

Simpel hjelp med en funksjon for å regne ut alder (=


Anbefalte innlegg

Heisann!

 

Jeg har laget en simpel liten fuksjon som skal hjelpe meg med å hente brukerens alder, ut i fra den gitte summen, f. eks 1970.10.10 (elelr hvordan det nå enn så ut)..

 

Ble fornøyd med scriptet intill jeg la merke til et problem.

Scriptet (fuksjonen) baserer seg på en persons dato på daten...

 

function birthday ($birthday) {
   list($year,$month,$day) = explode("-",$birthday);
   $year_diff  = date("Y") - $year;
   $month_diff = date("m") - $month;
   $day_diff   = date("d") - $day;
   if ($month_diff < 0) $year_diff--;
   elseif (($month_diff==0) && ($day_diff < 0)) $year_diff--;
   return $year_diff;
}

 

jeg tenkte "date()" skulle basere seg på "time()"?

Endret av slacky
Lenke til kommentar
Videoannonse
Annonse

Jeg regner med at du med "bursdag" mener "alder"? Å navngi funksjonene sine riktig er veldig viktig! :)

 

Jeg ville gjort som du foreslår (hvis jeg ikke misforsto deg): Lagret bursdagen i timestamp-format (sekunder etter 1970) og hentet ut år, måned og dato ved å bruke date().

Lenke til kommentar

Birthdate (Navnet kommer av at vi regner ut i fra deres fødselsdag).

Var vel ikke et så viktig spørsmål. Men, som du skjønner, så skal jeg hente ut alder.

 

Noen som vet hvordan? Jeg ønsker å beholde måten det er lagt opp på. (=

Endret av slacky
Lenke til kommentar

Jeg regner med at du med "bursdag" mener "alder"? Å navngi funksjonene sine riktig er veldig viktig! :)

 

Jeg ville gjort som du foreslår (hvis jeg ikke misforsto deg): Lagret bursdagen i timestamp-format (sekunder etter 1970) og hentet ut år, måned og dato ved å bruke date().

 

Birthdate (Navnet kommer av at vi regner ut i fra deres fødselsdag).

Var vel ikke et så viktig spørsmål. Men, som du skjønner, så skal jeg hente ut alder.

Funksjonen bruker fødselsdatoen for å regne ut alder. Et bedre navn på funksjonen hadde da vært "calculate_age" eller noe i den dur. "Birthday" gir ingen mening slik funksjonen oppfører seg og når man ser på hva den returnerer.

Lenke til kommentar

Var det da så nøye, er absålutt ikke det jeg trenge hjelp til! Helvette, ber simpelthen om å få litt hjelp her men faen heller? Har du ingen planer om å hjelpe meg med topic, så kan du holde snavla! :) Det er kansje viktig med "smart" navn på en funksjon, men det er JEG som bruker den, og det er MEG den skal passe, noe jeg føler den gjør!

Get it?

 

 

Til andre brukere: Beklager for litt aggresiv tone folkens, men er ute etter hjelp til selve koden, finner meg lite i det Runar begynner med.

Endret av slacky
Lenke til kommentar

Har du ingen planer om å hjelpe meg med topic, så kan du holde snavla! :)

Ro deg ned og les det første innlegget mitt. Dessuten har brukerens dato lokalt på datamaskinen ingenting med koden din å gjøre. Les hva PHP-manualen har å si om date() og time(), du. time() gir deg antall sekunder som har gått (basert på datoen på serveren din) siden 1. januar 1970, mens date() brukes for å gjøre om disse sekundene til et mer lesbart format.

 

Hvis du ikke tåler at kode du poster blir kritisert, bør du nesten vurdere å legge vekk kodingen for godt.

 

Get it? :)

Lenke til kommentar

Vel, nå er ikke navn på en funksjon mye kode. Uansett, så fant jeg ut at det var nytteløst å gå frem slik, da som du sier at time og date baserer seg på lokaltiden.

Men, om jeg da henter inn dato fra et sted hvor klokken er satt, korrekt. Og omformaterer den til unixtime.

Så går jeg frem slik som Thomas nevner: date('Y', $UnixKlokke));

 

Men, dette vil vel kreve mye rart. Problemet ligger flere plasser. F. eks innlogging og cookies. Der en ikke kan logge inn om klokken er en del feilstilt.

 

 

Uansett, så virker det ganske nytteløst. Men, problemet selv er ikke så stort, da de allerfleste ikke har en veldig feil klokke :)

Endret av slacky
Lenke til kommentar

jeg tenkte "date()" skulle basere seg på "time()"?

 

??

Sånn f.eks?

 

date('format', time()) ?

Nesten riktig. Med denne koden vil du få nåværende tidspunkt i valgte format.

 

 

Vel, nå er ikke navn på en funksjon mye kode. Uansett, så fant jeg ut at det var nytteløst å gå frem slik, da som du sier at time og date baserer seg på lokaltiden.

Funksjonene date() og time() baserer seg på lokaltiden til serveren, ikke de besøkende.

 

 

Uansett, så virker det ganske nytteløst. Men, problemet selv er ikke så stort, da de allerfleste ikke har en veldig feil klokke :)

Jeg mener funksjonen fungerer tilfredsstillende, hvis poenget er å finne brukerens alder basert på fødselsdato (angitt med $birthday). Det jeg derimot ville forandret, er å fjerne første linje i funksjonen og lagre fødselsdatoen i timestamp-format (sekunder). Brukerens lokale tid skal som sagt ikke ha noe å si for at funksjonen skal regne ut korrekt alder på vedkommende. Hvor får du egentlig $birthday fra i utgangspunktet?

 

Det vil da bli noe lignende dette:

function birthday ($birthday) {
   $year_diff  = date("Y") - date("Y", $birthday);
   // Resten av funksjonen.
}

Endret av Runar
Lenke til kommentar

Vel, nå er ikke navn på en funksjon mye kode. Uansett, så fant jeg ut at det var nytteløst å gå frem slik, da som du sier at time og date baserer seg på lokaltiden.

Men, om jeg da henter inn dato fra et sted hvor klokken er satt, korrekt. Og omformaterer den til unixtime.

Så går jeg frem slik som Thomas nevner: date('Y', $UnixKlokke));

 

Men, dette vil vel kreve mye rart. Problemet ligger flere plasser. F. eks innlogging og cookies. Der en ikke kan logge inn om klokken er en del feilstilt.

 

 

Uansett, så virker det ganske nytteløst. Men, problemet selv er ikke så stort, da de allerfleste ikke har en veldig feil klokke :)

 

Hva er problemet ditt egentlig? :roll:

Date og time printer ut datoen på serveren, ikke datoen på pcen din.

 

Prøv å sett dette øverst i koden:

date_default_timezone_set('Europe/Oslo');

Endret av Thomas.
  • Liker 1
Lenke til kommentar

Hmm... Det er vist korrekt som du sier.. :S

 

Merkelig problem jeg opplevde tidligere, men kan tenkes at jeg var på den lokale serveren (xampp). Uten å tenke gjennom det. (= Klokken hadde stilt seg inn på år 2000 etter formatering, da la jeg selvfølgelig merke til det..

 

Men, det løyser saken! Blir pluss på deg :D

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...