Avatar billede steen_hansen Forsker
13. marts 2009 - 00:49 Der er 14 kommentarer og
1 løsning

Beregn alder

Jeg har 3 recordsets med fødselsdata, gemt som tal:

RS("dateofbirth")
RS("montofbirth")
RS("yearofbirth")

Hvordan beregner jeg alderen? Jeg har kunnet søge lidt frem her på eksperten, men kan ikke få det til at spille. Der skal også tages hensyn til skudår.
Avatar billede arne_v Ekspert
13. marts 2009 - 01:17 #1
prøv:

' dd mm og yyyy er fødselsdata
age = DatePart("yyyy", Now()) - yyyy
If (DatePart("m", Now()) < mm) Or ((DatePart("m", Now()) = mm) And (DatePart("d", Now()) < dd)) Then age = age - 1
' age er alder
Avatar billede senil Nybegynder
13. marts 2009 - 11:30 #2
Bruge datediff
http://msdn.microsoft.com/en-us/library/b5xbyt6f(VS.80).aspx
http://msdn.microsoft.com/en-us/library/system.datetime.aspx

alla datediff("yyyy", date.now(), datetime(RS("yearofbirth"),RS("montofbirth"), RS("dateofbirth"))
Avatar billede steen_hansen Forsker
13. marts 2009 - 17:43 #3
arne_v, jeg f[r en Internal Server Error, når jeg prøver dit (lettere omskrevede) script:

<%

    Dim dateofbirth, monthofbirth, yearofbirth, age
    dateofbirth = RS("dateofbirth")
    monthofbirth = RS("monthofbirth")
    yearofbirth = RS("yearofbirth")
    age = DatePart("yearofbirth", Now()) - yearofbirth

    If (DatePart("m", Now()) < monthofbirth) Or ((DatePart("m", Now()) = monthofbirth) And (DatePart("d", Now()) < dateofbirth)) Then age = age - 1

%>

Fødselsdato og alder: <%=SQLEncode(RS("dateofbirth"))%>.&nbsp;<%=SQLEncode(RS("monthofbirth"))%>&nbsp;<%=SQLEncode(RS("yearofbirth"))%>, <%=age%> år

Forøvrigt, lige et tillægsspørgsmål: Hvordan omskriver jeg 7 til "juli", 8 til "august" osv? Jeg har det liggende i nogle meget gamle dokumenter et eller andet sted, men jeg orker ikke at lede alle disse dokumenter igennem :o[


Senil: Jeg kigger på det senere, ser interessant ud :)

Jeg synes det er blevet svært at poste indlæg? Jeg har ikke været på eksperten meget længe.
Avatar billede arne_v Ekspert
14. marts 2009 - 04:02 #4
<%
Function calcage(yyyy,mm,dd)
    age = DatePart("yyyy", Now()) - yyyy
    If (DatePart("m", Now()) < mm) Or ((DatePart("m", Now()) = mm) And (DatePart("d", Now()) < dd)) Then age = age - 1
    calcage = age
End Function

Response.Write calcage(2007,3,14)
Response.Write "<br>"
Response.Write calcage(2007,3,13)
%>

virker hos mig.
Avatar billede steen_hansen Forsker
14. marts 2009 - 18:52 #5
<%

    Dim dateofbirth, monthofbirth, yearofbirth
    dateofbirth = RS("dateofbirth")
    monthofbirth = RS("monthofbirth")
    yearofbirth = RS("yearofbirth")

    Function calcage(yearofbirth, monthofbirth, dateofbirth)
    age = DatePart("yearofbirth", Now()) - yearofbirth
        If (DatePart("m", Now()) < monthofbirth) Or ((DatePart("m", Now()) = monthofbirth) And (DatePart("d", Now()) < dateofbirth)) Then age = age - 1
        calcage = age
    End Function

%>

<html>

<body>

<%=calcage(yearofbirth, monthofbirth, dateofbirth)%>

</body>

</html>


Giver stadig samme fejl. Jeg gør vist et eller andet fuldstændigt galt?

Hvorfor dulen er det så svært at poste et indlæg? Det kan jo tage halve timer. java script: void(0); .... der er vist et eller andet, der ikke helt fungerer? Måtte installere FireFox for at kunne poste dette indlæg.
Avatar billede arne_v Ekspert
14. marts 2009 - 19:16 #6
Jeg kan ikke se noget i den postede kode som burde give en internal server error. Det må være i den kode du ikke har postet.
Avatar billede steen_hansen Forsker
15. marts 2009 - 01:50 #7
Dette er nøjagtigt hvad jeg har i dokumentet:

<%
Dim dateofbirth, monthofbirth, yearofbirth
dateofbirth = RS("dateofbirth")
monthofbirth = RS("monthofbirth")
yearofbirth = RS("yearofbirth")

Function calcage(yearofbirth, monthofbirth, dateofbirth)
age = DatePart("yearofbirth", Now()) - yearofbirth
    If (DatePart("m", Now()) < monthofbirth) Or ((DatePart("m", Now()) = monthofbirth) And (DatePart("d", Now()) < dateofbirth)) Then age = age - 1
    calcage = age
End Function
%>
<body>

<%=calcage(yearofbirth,monthofbirth,dateofbirth)%>

</body>

Det giver denne fejl:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator to inform of the time the error occurred and of anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Håber du kan se hvorfor :)
Avatar billede arne_v Ekspert
15. marts 2009 - 03:27 #8
Hvor kommer RS saa fra ??
Avatar billede steen_hansen Forsker
15. marts 2009 - 10:58 #9
RS er jo dimensioneret øverst ......?
Avatar billede steen_hansen Forsker
15. marts 2009 - 11:07 #10
Hvis jeg bare indsætter dette på siden, får jeg datoen (dd) fint ud:

<%=dateofbirth%>

Men jeg får fejlen, når jeg forsøger med Function calcage:

<%=calcage(yearofbirth,monthofbirth,dateofbirth)%>
Avatar billede steen_hansen Forsker
15. marts 2009 - 11:22 #11
Lige en kommentar til 15. marts 2009 kl. 10:58:39| #9:

RS er hemtet her:

<%
Set RS = Conn.Execute("SELECT * FROM [MinTabel] WHERE username = '" & SQLEncode(Session("username")) & "'")
%>

Nede i tabellen ligger så dateofbirth, monthofbirth og yearofbirth. Herefter bliver dateofbirth, monthofbirth og yearofbirth dimensioneret:

<%
Dim dateofbirth, monthofbirth, yearofbirth
dateofbirth = RS("dateofbirth")
monthofbirth = RS("monthofbirth")
yearofbirth = RS("yearofbirth")
%>
Avatar billede steen_hansen Forsker
15. marts 2009 - 11:36 #12
Jeg rettede alt det jeg havde (dateofbirth mv.), til nøjagtigt hvad du skrev:

<%
Dim dd, mm, yyyy
dd = RS("dateofbirth")
mm = RS("monthofbirth")
yyyy = RS("yearofbirth")

Function calcage(yyyy, mm, dd)
age = DatePart("yyyy", Now()) - yyyy
    If (DatePart("m", Now()) < mm) Or ((DatePart("m", Now()) = mm) And (DatePart("d", Now()) < dd)) Then age = age - 1
    calcage = age
End Function
%>

<body>

<%=calcage(yyyy, mm, dd)%> år

</body>

Og så virker det fint. Jeg troede dd, mm og yyyy bare var variabler, men de SKAL åbenbart benyttes til datoberegning? Jeg takker mange gange. Lægger du et svar?

Forøvrigt, vil det komme til at passe med skudår også?
Avatar billede steen_hansen Forsker
15. marts 2009 - 11:55 #13
Og hvordan omdanner jeg 1 til januar, 2 til februar osv, alså skriver hele måneden fuldt ud?
Avatar billede arne_v Ekspert
15. marts 2009 - 19:31 #14
Det burde virke med skudaar.

Prøv med:
  MonthName(mm)

og svar.
Avatar billede steen_hansen Forsker
15. marts 2009 - 20:02 #15
Perfekt, takker :)
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