Avatar billede steen_hansen Forsker
09. november 2003 - 10:22 Der er 27 kommentarer og
1 løsning

Beregne alder, samt antal dage til næste fødselsdag

Hvis brugerne ved oprettelse skal angive deres fødselsdag:

<select size="1" tabindex="15" name="dateofbirth" class="input">
    <option selected>Dato</option>
    <option value="1">1</option>
    <option value="2">2</option>
    [....]
    <option value="31">31</option>
</select>

<select size="1" tabindex="16" name="monthofbirth" class="input">
    <option selected>Måned</option>
    <option value="1">januar</option>
    <option value="2">februar</option>
    <option value="3">marts</option>
    [....]
    <option value="12">december</option>
</select>

<select size="1" tabindex="17" name="yearofbirth" class="input">
    <option selected>År</option>
    <option value="1900">1900</option>
    <option value="1901">1901</option>
    <option value="1902">1902</option>
    <option value="1903">1903</option>
    [....]
    <option value="2003">2003</option>
</select>

- og disse data bliver smidt ned i hhv. RS("dateofbirth"), RS("monthofbirth") og RS("yearofbirth") som tekst i en MS Access-database, hvordan beregner man så

1) alderen?
2) antallet af dage til næste fødselsdag?
Avatar billede steen_hansen Forsker
09. november 2003 - 10:26 #1
Tillægsspørgsmål til 25 bobs:

Hvordan beregner man antal dage til næste jul, uanset hvilket årstal man befinder sig i?
Avatar billede eagleeye Praktikant
09. november 2003 - 10:27 #2
Beregning af alder hvor meget skal med kun antal år?
Avatar billede steen_hansen Forsker
09. november 2003 - 10:28 #3
Hej eagleeye :O)

Nu du siger det, så kunne det være sjovt at få antal dage med også.
Avatar billede eagleeye Praktikant
09. november 2003 - 10:36 #4
Her er lidt du kan prøve at rode med så :)


1. Jeg har dette script som udregner alderen på en person i år-måneder-dage..:

<%
sBirthdate = "04-01-1985"
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
%>


2.

sBirthdate = "04-01-1985"¨
sBirthdate = day(sBirthdate) & "-" & month(sBirthdate) & "-" & Year(date)
if month(sBirthdate) < month(date) OR (month(sBirthdate) = month(date) AND day(sBirthdate) <= day(date)) then
  sBirthdate = DateAdd("y",1,sBirthdate)
end if

DageTilFD = DateDiff("d",date,sBirthdate)
 


3.

juleAften = "24-12-" & year(Date)
if CDate(juleAften) < CDate(Date) then
  juleAften = DateAdd("y", 1, juleAften)
end if
DageTilJul = DateDiff("d", date, juleAften)
Avatar billede steen_hansen Forsker
09. november 2003 - 10:40 #5
Det ser smukt ud, men hvordan får jeg hevet:

RS("dateofbirth"), RS("monthofbirth") og RS("yearofbirth") over som f.eks. 25-10-1968?
Avatar billede steen_hansen Forsker
09. november 2003 - 10:41 #6
RS("25")& "-" & RS("10")& "-" & RS("1968") = 25-10-1968

Er det sådan det skal sættes op?
Avatar billede eagleeye Praktikant
09. november 2003 - 10:59 #7
ja næsten du skal bare bruge kolonne nanvne og ikke tallerne:

sBirthdate = RS("dateofbirth") & "-" & RS("monthofbirth") & "-" & RS("yearofbirth")
Avatar billede steen_hansen Forsker
09. november 2003 - 11:53 #8
Sorry, jeg skulle lige handle lidt ind.

Jeg får en Type mismatch-fejl?

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'RS'

/hansens/includes/mybirthday.asp, line 2

mybirthday.asp ser nu sådan ud:

<%
sBirthdate = RS("dateofbirth") & "-" & RS("monthofbirth") & "-" & RS("yearofbirth")
dato1 = sBirthdate
years = Datediff ("yyyy",dato1,date)
dato = dateAdd("yyyy",years,dato1)
months = Datediff ("m",dato1,date)

If months < 0 then
    dato1 = dateAdd("yyyy",-1,dato1)
    months = Datediff ("m",dato1,date)
    years = years - 1
End If

dato = dateAdd("m",months,dato1)
days = Datediff ("d",dato1,date)

If days < 0 then
    If months > 0 then
        months = months - 1
    Else
        years = years - 1
        months = 11
    End If
    dato = dateAdd("m",-1,dato1)
    days = Datediff ("d",dato1,date)
End If

dinStr = years & " år " & months & " måneder " & days & " dage"

Response.Write dinStr
%>
Avatar billede steen_hansen Forsker
09. november 2003 - 11:54 #9
SORRY, jeg har ingen DB-forbindelse :o)

Sætter det lige ordentligt op ...
Avatar billede steen_hansen Forsker
09. november 2003 - 12:20 #10
Hm, hvor gammel jeg er, bliver vist korrekt, men DageTilFD returnerer -72

Her er koden:

<%
    Dim Conn, RS
    Set Conn = CreateObject("ADODB.Connection")
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/mappe1/mindatabase.mdb")

    Set RS = Conn.Execute("SELECT * FROM personalinfo WHERE username = '" & SQLEncode(Session("username")) & "'")

    If RS.EOF Then
        Response.Redirect "default.asp?msg=Der+skete+en+fejl.+Log+venligst+ind+igen."
    End If

    sBirthdate = SQLEncode(RS("dateofbirth")) & "-" & SQLEncode(RS("monthofbirth")) & "-" & SQLEncode(RS("yearofbirth"))
    dato1 = sBirthdate
    years = Datediff ("yyyy",dato1,date)
    dato1 = dateAdd("yyyy",years,dato1)
    months = Datediff ("m",dato1,date)

    If months < 0 then
        dato1 = dateAdd("yyyy",-1,dato1)
        months = Datediff ("m",dato1,date)
        years = years - 1
    End If

    dato1 = dateAdd("m",months,dato1)
    days = Datediff ("d",dato1,date)

    If days < 0 then
        If months > 0 then
            months = months - 1
        Else
            years = years - 1
            months = 11
        End If
        dato1 = dateAdd("m",-1,dato1)
        days = Datediff ("d",dato1,date)
    End If

    dinStr = years & " år " & months & " måneder " & days & " dage"

    sBirthdate1 = SQLEncode(RS("dateofbirth")) & "-" & SQLEncode(RS("monthofbirth")) & "-" & SQLEncode(RS("yearofbirth"))
    sBirthdate1 = day(sBirthdate1) & "-" & month(sBirthdate1) & "-" & Year(date)

    If month(sBirthdate1) < month(date) OR (month(sBirthdate1) = month(date) AND day(sBirthdate1) <= day(date)) then
        sBirthdate1 = DateAdd("y",1,sBirthdate1)
    End If

    DageTilFD = DateDiff("d",date,sBirthdate1)
%>
Avatar billede steen_hansen Forsker
09. november 2003 - 12:57 #11
Og det er rigtigt nok, på sin måde: Der er gået 72 dage siden min fødselsdag den 28. august. Så skal scriptet bare modregne det, så det er de resterende dage/måneder til næste fødselsdag :o)
Avatar billede steen_hansen Forsker
09. november 2003 - 15:03 #12
Du HAR fortjent pointene, eagleeye, jeg vil bare lige gerne have det sidste script på plads :o)
Avatar billede eagleeye Praktikant
09. november 2003 - 15:45 #13
jeg har lige være væk nogle timer..
;)

Prøv at lave disse linjer:

    sBirthdate1 = SQLEncode(RS("dateofbirth")) & "-" & SQLEncode(RS("monthofbirth")) & "-" & SQLEncode(RS("yearofbirth"))
    sBirthdate1 = day(sBirthdate1) & "-" & month(sBirthdate1) & "-" & Year(date)

    If month(sBirthdate1) < month(date) OR (month(sBirthdate1) = month(date) AND day(sBirthdate1) <= day(date)) then
        sBirthdate1 = DateAdd("y",1,sBirthdate1)
    End If

    DageTilFD = DateDiff("d",date,sBirthdate1)


Ok til dette:

    maaned = Int(SQLEncode(RS("monthofbirth")))
    dag = Int(SQLEncode(RS("dateofbirth")))
    sBirthdate1 = dag & "-" & maaned & "-" & Year(date)

    If maaned < int(month(date)) OR (maaned = int(month(date)) AND dag <= int(day(date))) then
        sBirthdate1 = DateAdd("y",1,sBirthdate1)
    End If

    DageTilFD = DateDiff("d",date,sBirthdate1)
Avatar billede steen_hansen Forsker
09. november 2003 - 16:07 #14
Hm, det er det samme :o/

"-72 dage til din næste fødselsdag"
Avatar billede steen_hansen Forsker
09. november 2003 - 16:07 #15
Hele koden ser således ud nu:

<%
    sBirthdate = SQLEncode(RS("dateofbirth")) & "-" & SQLEncode(RS("monthofbirth")) & "-" & SQLEncode(RS("yearofbirth"))
    dato1 = sBirthdate
    years = Datediff ("yyyy",dato1,date)
    dato1 = dateAdd("yyyy",years,dato1)
    months = Datediff ("m",dato1,date)

    If months < 0 then
        dato1 = dateAdd("yyyy",-1,dato1)
        months = Datediff ("m",dato1,date)
        years = years - 1
    End If

    dato1 = dateAdd("m",months,dato1)
    days = Datediff ("d",dato1,date)

    If days < 0 then
        If months > 0 then
            months = months - 1
        Else
            years = years - 1
            months = 11
        End If
        dato1 = dateAdd("m",-1,dato1)
        days = Datediff ("d",dato1,date)
    End If

    dinStr = years & " år " & months & " måneder " & days & " dage"

    sBirthdate1 = SQLEncode(RS("dateofbirth")) & "-" & SQLEncode(RS("monthofbirth")) & "-" & SQLEncode(RS("yearofbirth"))
    sBirthdate1 = day(sBirthdate1) & "-" & month(sBirthdate1) & "-" & Year(date)

    If month(sBirthdate1) < month(date) OR (month(sBirthdate1) = month(date) AND day(sBirthdate1) <= day(date)) then
    sBirthdate1 = DateAdd("y",1,sBirthdate1)
    End If

    DageTilFD = DateDiff("d",date,sBirthdate1)

    maaned = Int(SQLEncode(RS("monthofbirth")))
    dag = Int(SQLEncode(RS("dateofbirth")))
    sBirthdate1 = dag & "-" & maaned & "-" & Year(date)

    If maaned < int(month(date)) OR (maaned = int(month(date)) AND dag <= int(day(date))) then
    sBirthdate1 = DateAdd("y",1,sBirthdate1)
    End If

    DageTilFD = DateDiff("d",date,sBirthdate1)

    juleAften = "24-12-" & year(Date)
    If CDate(juleAften) < CDate(Date) then
        juleAften = DateAdd("y", 1, juleAften)
    End If
    DageTilJul = DateDiff("d", date, juleAften)
%>
Avatar billede eagleeye Praktikant
09. november 2003 - 16:21 #16
doh det lidt pinligt ;) 

"y" i DateAdd skal være "yyyy" for at ligge år til datoen.

Så prøv at rette:

      sBirthdate1 = DateAdd("y",1,sBirthdate1)

til:

      sBirthdate1 = DateAdd("yyyy",1,sBirthdate1)


det gælder også for den med juleAften så :)
Avatar billede steen_hansen Forsker
09. november 2003 - 16:26 #17
Yes, så virker det! :o)

Jeg har lige et ekstra ønske til - skal vi sige 15 point?

Når en person har fødselsdag, vil det være meget fint, hvis der stod et stort TILLYKKE!, og når det er jul kunne der stå glædelig jul. Hvordan skal den grejes? Har du tid? :o)
Avatar billede steen_hansen Forsker
09. november 2003 - 16:26 #18
25 point :o)
Avatar billede eagleeye Praktikant
09. november 2003 - 16:35 #19
Ja..

Det med fødselsdag kan du lave sådan her og ligge det samme med alderen:

if CDate(sBirthdate) = CDate(date) then  Response.Write "TILLYKKE!"


Det med jul kan du tilføje denne efter varialben juleAften har fået en værdi:

if CDate(juleAften) = CDate(date) then  Response.Write "Glædelig jul"
Avatar billede steen_hansen Forsker
09. november 2003 - 16:45 #20
Juleaften er på plads, men der er da ikke nogen CDate i forbindelse med fødselsdagen?
Avatar billede steen_hansen Forsker
09. november 2003 - 20:30 #21
Ok, håber du får tid senere.

Men det er fedt, det virker bare! Foreløbig 98769874 tak for hjælpen! :o)
Avatar billede eagleeye Praktikant
09. november 2003 - 22:03 #22
Nej det rigtigt det er også denne som er ment der skal skrive tillykke hvis en har fødseldsdag.

if CDate(sBirthdate) = CDate(date) then  Response.Write "TILLYKKE!"


jeg ved ikke helt hvor du vil udskrive det, du kan evt ligge det til denne streng hvor alderren er udreget:

dinStr = years & " år " & months & " måneder " & days & " dage"



Evt:

  dinStr = years & " år " & months & " måneder " & days & " dage"

  if CDate(sBirthdate) = CDate(date) then 
    dinStr = dinStr & " TILLYKKE!"
  end if
Avatar billede steen_hansen Forsker
09. november 2003 - 23:24 #23
Ok, det jeg ikke forstår er, at du skriver

[IF] CDate ....

CDate er jo ikke defineret nogen steder, det bliver den jo kun under jule-afsnittet ... eller er det mig, der er for tumbet :o)
Avatar billede eagleeye Praktikant
09. november 2003 - 23:26 #24
Når ok, nej.

CDate er en funktion som konvertere en streng til type date/time i et bestemt format. Hvis begge i if sætningen har samme format og type kan man sammelige dem ordenligt.
Avatar billede steen_hansen Forsker
09. november 2003 - 23:32 #25
Ok, jeg prøver :o)
Avatar billede steen_hansen Forsker
09. november 2003 - 23:47 #26
Hm, det giver ingen forskel, hvis jeg ændrer en profils fødselsdato til 9-11-2003, burde der stå "TILLYKKE MED FØDSELSDAGEN!", men den skriver stadig hvor mange dage til næste fødselsdag etc.:

    <b>FØDSELSDAG:</b><br>
<% If CDate(sBirthdate) = CDate(date) Then %>
    <b>TILLYKKE MED FØDSELSDAGEN!</b><br><br>
    <b>JUL:</b><br>Der er nu <b><%=DageTilJul%></b> dage til juleaften!<br><br>
    Husk at skrive din <a href="#" onFocus="this.blur()"><b>julegaveønskeliste</b></a>
<% Else %>
    Du er nu:<br>
    &nbsp;&nbsp;- <b><%=years%></b> år<br>
    &nbsp;&nbsp;- <b><%=months%></b> måneder og<br>
    &nbsp;&nbsp;- <b><%=days%></b> dage gammel.<br><br>
    Der er <b><%=DageTilFD%></b> dage til din næste fødselsdag!<br><br>Har du husket at udfylde din <a href="#" onFocus="this.blur()"><b>ønskeliste</b></a> til din fødselsdag?<br><br>
    <% If CDate(juleAften) = CDate(date) Then %>
        Glædelig jul!
    <% Else %>
        <b>JUL:</b><br>Der er nu <b><%=DageTilJul%></b> dage til juleaften!<br><br>
        Husk at skrive din <a href="#" onFocus="this.blur()"><b>julegaveønskeliste</b></a>
    <% End If %>
<% End If %>
Avatar billede steen_hansen Forsker
09. november 2003 - 23:48 #27
Jeg er ved at daffe i seng, håber vi kan lave den færdig i morgen.

Snakkes! :o)
Avatar billede eagleeye Praktikant
10. november 2003 - 00:12 #28
hmm der var jeg vist for hurtig ;)
Det skal kun være måned og dag man tjekke på og ikke år, eller ville den kun side man havde fødseldag hvor års tallet også passer...

Prøv at rette:

<% If CDate(sBirthdate) = CDate(date) Then %>


Til:

<% If Month(sBirthdate) = Month(date) AND Day(sBirthdate) = Day(date) Then %>
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