webForumDet fria alternativet

Födelsedag

ASP

16 svar · 314 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Frågan#1

Har en kod som skriver ut hur många år man är och när man fyller år skriver den ut Grattis, x år och annars bara årtalet. Men när det har gått en dag så det är dagen efter sin födelsedag så är man bara så gammal som man var innan man fyllde år! Samma sak gäller alla dagar efteråt. Vad har jag gjort för fel?

<%
FDT = "1980-09-20"

Dag = Day(date)
If Len(Dag) = 1 Then 
  Dag = "0" & Dag
Else
  Dag = Dag
End If

Man = Month(date)
If Len(Man) = 1 Then
  Man = "0" & Man
Else
  Man = Man
End If

Function Birth(str)
    res = DateDiff("yyyy", str, date())
    If Cint(Man) =< Mid(str,6,2) AND Cint(Dag) < Right(str,2) Then res=res-1
    Birth = res
End Function

If Cint(Right(FDT,2)) = Cint(Dag) And Cint(Mid(FDT,6,2)) = Cint(Man) Then%>
  GRATTIS, <%=Birth(FDT)%> år
<%Else%>
  <%=Birth(FDT)%> år
<%End If%>
Medlem sedan dec. 20011 860 inlägg
#2

Hmm, den visade visst ändå samma ålder när man fyllde år! Nån som vet hur jag ska skriva? Kanske denna är bättre att bygga på men det visar ju oxå fel :(

<%
FDT = Cdate("2000-09-19")

Function Birth(str)
    res = DateDiff("yyyy", str, date())
    If Month(date) =< Month(str) AND Day(date) < Day(str) Then res=res-1
    Birth = res
End Function

If Cint(Day(FDT)) = Cint(Day(date)) And Cint(Month(FDT)) = Cint(Month(date)) Then%>
  GRATTIS, <%=Birth(FDT)%> år
<%Else%>
  <%=Birth(FDT)%> år
<%End If%>
Medlem sedan dec. 20003 887 inlägg
#3

Jag skulle nog lösa det såhär...

If Month(FDT) = Month(Date) AND Day(FDT) = Day(Date) Then
  Response.Write "Grattis, " & Year(Date) - Year(FDT) & " år."
Else
  Reponse.Write Year(FDT)
End If
Medlem sedan dec. 20011 860 inlägg
#4

Har jag bara det så stämmer det ju ej! Vill ha precis på dagen!

Medlem sedan dec. 20003 887 inlägg
#5

red.

If Month(FDT) = Month(Date) AND Day(FDT) = Day(Date) Then
  Response.Write "Grattis, "
End If

Response.Write Year(Date) - Year(FDT) & " år."
Medlem sedan dec. 20011 860 inlägg
#6

Men med den koden är man ex 23 år från 1 januari 2003. Man ska bli det ex 19 sept 2003.

Medlem sedan dec. 20003 887 inlägg
#7

Jo, jag märkte just det när jag testade litegrann... ska se om jag inte kommer på något ;)

Medlem sedan dec. 20011 860 inlägg
#8

Tackar att du vill hjälpa till :)

Medlem sedan dec. 20003 887 inlägg
#9
dteBirth = [i]födelsedag[/i]
dteToday = Date
intYears = Year(dteToday) - Year(dteBirth)

If Month(dteBirth) = Month(dteToday) And Day(dteBirth) = Day(dteToday) Then Response.Write "Grattis, "

If Month(dteBirth) > Month(dteToday) Then intYears = intYears + 1
If Month(dteBirth) = Month(dteToday) And Day(dteBirth) >= Day(dteToday) Then intYears = intYears + 1

Response.Write intYears & " år."

Kan det där ha blivit rätt månne?

red.
Det kan behövas lägga till en koll för dom som är födda den 1:a Januari... en tredje If-sats

If Month(dteBirth) = 1 And Day(dteBirth) = 1 Then intYears = intYears - 1
Medlem sedan dec. 20011 860 inlägg
#10

Den visar + 1 hela tiden! Annars verkar det stämma! Testa med olika födelsedagar så ser du:
dteBirth = "1980-09-18"
dteBirth = "1980-09-19"
dteBirth = "1980-09-20"

Medlem sedan dec. 20011 860 inlägg
#11

Ahh, såg din redigering! SKa testa! Det visar iallafall 1 år för mycket för mig! ANnars stämde det fint.

Medlem sedan dec. 20003 887 inlägg
#12

Ajj... det beror nog på att jag har satt två större än åt fel håll så att säga :)

If Month(dteBirth) < Month(dteToday) Then intYears = intYears + 1
If Month(dteBirth) = Month(dteToday) And Day(dteBirth) <= Day(dteToday) Then intYears = intYears + 1

Så borde det ju bli...

Medlem sedan dec. 20011 860 inlägg
#13

Tusan! Det bara strular :( Hur funkar det för dig då?

Medlem sedan dec. 20003 887 inlägg
#14

Jodå, nu fungerade det som jag hade tänkt... och så här ser det då ut

dteToday = Date
dteBirth = ...
intYears = Year(dteToday) - Year(dteBirth)

If Month(dteToday) = Month(dteBirth) And Day(dteToday) = Day(dteBirth) Then Response.Write "Grattis, "
If Month(dteToday) > Month(dteBirth) Or (Month(dteToday) = Month(dteBirth) And Day(dteToday) >= Day(dteBirth)) Then intYears = intYears + 1

Response.Write intYears & " år."
Medlem sedan dec. 20011 860 inlägg
#15

Men när jag ställer att man fyller år den 18 sept (född 1980) så är man 24 år före och på dagen men efter är man 23 åt. Blire inte så för dig med sista koden?

Medlem sedan dec. 20003 887 inlägg
#16

Jag testade förvisso med 1977-09-18, 19 och 20 och då fick jag inga fel.

Medlem sedan dec. 20011 860 inlägg
#17

Hmm, okej! Men då får jag väl testa lite mer då! Men tackar för all hjälp!

253 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)