Hur får jag fram åldern på en person ? Att ange antal månader är lite difust eftersom en månad kan vara olika lång... Bättre att ange år och dagar då... Här är en lösning...notera dock att skottår inte hanteras i funktionen DaysInMonth. Finns säkert en bugg eller två men jag måste göra skäl för min lön nu :-) <b>Åldern med DateDiff är lätt men ger bara Åren.</b> Som JohanD sa är det svårt med månader. Hur lång tid är det mellan 2003-02-28 till 2003-03-31? Detta exempel antar att det är en månad och 3 dagar. Gus : Fusk att använda VB.Net i ett VB6(?)-forum :-) Jag fick ju skriva min egen DaysInMonth... Bifogar ett fungerande exempel jag använt som VBScript / ASP. <b>Gus : Fusk att använda VB.Net i ett VB6(?)-forum</b> Fungerar ganska bra, men dagproblemet ärÅlder
Jag menar du är nu xxår , xxmånader och xxantal dagar i samma textruta ?
Åldern med DateDiff är lätt men ger bara Åren.
007.jan.andersson@telia.comSv: Ålder
För att få detta rätt med skottår får man nog göra såhär. Räkna ut antal år med datediff. Räkna sedan ut antal dagar sedan senaste födelsedagen (månad och dag från födelsedagen och årets år om personen redan fyllt år, om personen inte fyllt år i år får du ta föregående år).
/JohanSv: Ålder
<code>
Option Explicit
Private Sub Command1_Click()
Dim birthdate As Date
Dim today As Date
Dim Year As Integer
Dim Month As Integer
Dim day As Integer
Dim dayToday As Integer
Dim dayBirth As Integer
birthdate = CDate("1970-11-17")
today = Now
Year = DateDiff("yyyy", birthdate, today)
If Year < 0 Then MsgBox "Datumstrul!"
Month = DateDiff("M", birthdate, today)
Month = Month - Year * 12
If Month < 0 Then
Month = 12 + Month
Year = Year - 1
End If
dayToday = DatePart("d", today)
dayBirth = DatePart("d", birthdate)
day = dayToday - dayBirth
If day < 0 Then
day = DaysInMonth(DatePart("m", today)) - dayToday + dayBirth
Month = Month - 1
If Month < 0 Then
Month = 12 + Month
Year = Year - 1
End If
End If
MsgBox "Year : " & Year & " Month : " & Month & " Day : " & day
End Sub
Public Function DaysInMonth(ByVal Month As Integer) As Integer
Select Case Month
Case 1, 3, 5, 7, 8, 10, 12
DaysInMonth = 31
Case 4, 6, 9, 11
DaysInMonth = 30
Case 2
If IsLeapYear Then
DaysInMonth = 29
Else
DaysInMonth = 28
End If
End Select
End Function
Public Function IsLeapYear() As Boolean
' TODO : Fixa skottår
IsLeapYear=False
End Function
</code>Sv: Ålder
Det beror ju på hur man använder den...
Koden nedan tror jag skall fungera, har inte testat alla fall och kan inte garantera att den är helt buggfri eftersom jag oxå behöver göra skäl för min lön. ;-)
<code>
Dim dtCompare As New DateTime(textbox1.text) 'födelsedatum för en person (eller annan händelse)
Dim dtNow As DateTime = Now()
Dim YearDiff As Long = DateDiff(DateInterval.Year, dtCompare, dtNow)
dtCompare = dtCompare.AddYears(YearDiff)
Dim MonthDiff As Long = DateDiff(DateInterval.Month, dtCompare, dtNow)
dtCompare = dtCompare.AddMonths(MonthDiff)
If MonthDiff < 0 Then
YearDiff -= 1
MonthDiff = 12 + MonthDiff
End If
Dim dayDiff As Long = DateDiff(DateInterval.Day, dtCompare, dtNow)
If dayDiff < 0 Then
MonthDiff -= 1
dayDiff = Date.DaysInMonth(dtCompare.Year, dtCompare.Month) + dayDiff
End If
TextBox2.Text = YearDiff.ToString & "-" & MonthDiff.ToString & "-" & dayDiff.ToString
</code>Sv: Ålder
<code>
endDate = CDate("2004-09-24")
startDate = CDate("1980-01-01")
Do while dateadd("yyyy", years+1, startDate) < endDate
years = years + 1
Loop
startDate = dateadd("yyyy", years, startDate)
Do while dateadd("m", months+1, startDate) < endDate
months = months + 1
Loop
startDate = dateadd("m", months, startDate)
Do while dateadd("d", days+1, startDate) <= endDate
days = days + 1
Loop
msgbox "år=" & years & " månader=" & months & " dagar=" & days
</code>Sv: Ålder
Nä, skämt åsido...men du tar inte omhand om att Month kan bli mindre än noll om dayDiff<0...Annars är vår kod rätt lika så vi har tänkt likadant....Sv: Ålder
PNR = Trim("620114-0000")
Ar = Left(PNR,2)
Manad = Mid(PNR,3,2)
Dag = Mid(PNR,5,2)
FodelseTid = Ar&"-"&Manad&"-"&Dag
Diff = DateDiff("yyyy", FodelseTid, Now)
If Month(FodelseTid) > Month(now()) Then
Diff = Diff - 1
Elseif Month(FodelseTid) = Month(now()) Then
If Day(FodelseTid) > Day(now()) Then
Diff = Diff - 1
End If
End If
Alder = Diff
Response.Write(Alder & " år")
mvh
TobbeSv: Ålder
Oj, ledsen. Kollade nog lite otydligt i vilket forum det var... Skall bättra mig.Sv: Ålder
1 dag skillnad gör att svaret blir 32 dagar och det finns
ju högst 31 dagar i en månad
Men annars tack.