Avatar billede elkrog Nybegynder
15. februar 2003 - 23:15 Der er 16 kommentarer og
1 løsning

Beregne alder udfra dato.

Hej Eksperter

Jeg vil gerne beregne alderen på en person udfra en given dato.
Jeg har selv forsøgt at rode lidt med det, men kan ikke få det til at fungere korrekt.

Jeg har lånt denne kodestump fra http://www.eksperten.dk/spm/262112 men hvis jeg bruger datoen 31-12-2002 udregnes alderen til 1 måned og 18 dage.
Men når jeg tæller efter udfra dags dato burde alderen kun blive 1 måned og 15 dage.

<%
sBirthdate = "31-12-2002"
dato = sBirthdate
years = Datediff ("yyyy",dato,date)
dato = dateAdd("yyyy",years,dato)
mounths = Datediff ("m",dato,date)
if mounths < 0 then
  dato = dateAdd("yyyy",-1,dato)
  mounths = Datediff ("m",dato,date)
  years = years - 1
end if
dato = dateAdd("m",mounths,dato)
days = Datediff ("d",dato,date)
if days < 0 then
  if mounths > 0 then
    mounths = mounths - 1
  else
    years = years - 1
    mounths = 11
  end if
  dato = dateAdd("m",-1,dato)
  days = Datediff ("d",dato,date)
end if
dinStr = years & " år " & mounths & " måneder " & days & " dage"

Response.Write dinStr

%>


Kan nogen hjælpe mig med at udregne den korrekte alder enten udfra ovenstående kodestump eller gerne helt fra bunden.
Avatar billede arne_v Ekspert
15. februar 2003 - 23:52 #1
Dette her virker i VB:

Function calcage(d As String) As Integer
  Dim age As Integer
  age = DateDiff("yyyy", d, Now())
  If DatePart("y", d) > DatePart("y", Now()) Then
      age = age - 1
  End If
  calcage = age
End Function
Avatar billede elkrog Nybegynder
15. februar 2003 - 23:56 #2
OK, men hvor definerer jeg hvilken dato der skal bregnes udfra?
Avatar billede arne_v Ekspert
16. februar 2003 - 00:00 #3
Du har en streng som indholder fødselsdatoen - det er den som
hedder d i mit eksempel.

Hvis jeg skulle forsøge at flette min kode ind i din så ville de blive:

<%
sBirthdate = "31-12-2002"
age = DateDiff("yyyy", d, Now())
If DatePart("y", d) > DatePart("y", Now()) Then
  age = age - 1
End
IfdinStr = "du er " & age & " år gammel"
Response.Write dinStr
%>
Avatar billede arne_v Ekspert
16. februar 2003 - 00:01 #4
Hov jeg fik ikek erstattet rigtigt - jeg prøver igen:

<%
sBirthdate = "31-12-2002"
age = DateDiff("yyyy", sBirthdate, Now())
If DatePart("y", sBirthdate) > DatePart("y", Now()) Then
  age = age - 1
End
IfdinStr = "du er " & age & " år gammel"
Response.Write dinStr
%>
Avatar billede arne_v Ekspert
16. februar 2003 - 00:02 #5
Skal du også have måned og år ?
Avatar billede hossein Nybegynder
16. februar 2003 - 00:02 #6
dtBirthdate = cdate("10/3/1975")
intAge = datediff("yyyy", dtBirthdate, now)

også træk en fra hvis dag og måned (fædselsdag) er mindre end den actualle måned og dag:

If Date < DateSerial(Year(Now), _
    Month(dtBirthdate), Day(dtBirthdate)) Then

  intAge = intAge - 1

End If
Avatar billede arne_v Ekspert
16. februar 2003 - 00:02 #7
Det er for sent ! Skal du også have måned og dag ?
Avatar billede elkrog Nybegynder
16. februar 2003 - 00:03 #8
Gerne med måned og dag.
Avatar billede arne_v Ekspert
16. februar 2003 - 00:23 #9
det er sgu ikke helt nemt.

Lidt eksperimenteren gav:

Function calcage(d As String) As String
  Dim agey, agem, aged As Integer
  agey = DateDiff("yyyy", d, Now())
  If DatePart("y", d) > DatePart("y", Now()) Then
      agey = agey - 1
  End If
  agem = DateDiff("m", d, Now()) - agey * 12
  If DatePart("y", d) > DatePart("y", Now()) Then
      agem = agem - 1
  End If
  aged = DateDiff("d", DateAdd("m", agem, DateAdd("yyyy", agey, d)), Now())
  calcage = d + " = " + Str(agey) + " " + Str(agem) + " " + Str(aged)
End Function
Avatar billede arne_v Ekspert
16. februar 2003 - 00:24 #10
Eller:

<%
sBirthdate = "31-12-2002"
age = DateDiff("yyyy", d, Now())
If DatePart("y", d) > DatePart("y", Now()) Then
  age = age - 1
End
agem = DateDiff("m", d, Now()) - agey * 12
If DatePart("y", d) > DatePart("y", Now()) Then
  agem = agem - 1
End If
aged = DateDiff("d", DateAdd("m", agem, DateAdd("yyyy", agey, d)), Now())
IfdinStr = "du er " & agey & " år " & agem & " måneder " & aged & " dage gammel"
Response.Write dinStr
%>
Avatar billede arne_v Ekspert
16. februar 2003 - 00:25 #11
Jeg er ikke skrap til ASP, så du må hellere checke syntaxen.
Avatar billede elkrog Nybegynder
16. februar 2003 - 22:16 #12
Tak til dig arne_v.
Jeg fik rodet lidt med dit sidste forslag og fik det til at virke som det skulle (og det udregner alderen korrekt).
Avatar billede elkrog Nybegynder
16. februar 2003 - 22:33 #13
Dvs. det gør den alligevel ikke.
Den glemmer at lave månderne om til år når man er mere end 12 måndeder gammel.
Avatar billede arne_v Ekspert
16. februar 2003 - 22:43 #14
Hvilket eksempel har du testet med ?
Avatar billede elkrog Nybegynder
16. februar 2003 - 22:43 #15
Men det gør den nu :))
Avatar billede elkrog Nybegynder
16. februar 2003 - 22:49 #16
Hej Arne
Det virker fint nu, jeg har rettet lidt i dit forslag (16/02-2003 00:24:59) og det virker, også med månederne.
Avatar billede arne_v Ekspert
16. februar 2003 - 22:50 #17
Fint.
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
Kurser inden for grundlæggende programmering

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