Avatar billede steensommer Praktikant
10. september 2008 - 21:47 Der er 14 kommentarer og
1 løsning

Beregne alder

Hvorledes beregnes alderen udfra cpr. Jeg har forsøgt følgende men får en fejl i run-time med konvertering til string:

Dim FDato As Long
FDato = DateDiff("YYYY", CDate(Microsoft.VisualBasic.Left(Cpr, 6)), Now)
Avatar billede kabbak Professor
10. september 2008 - 22:01 #1
noget i denne retning

FDato = DateDiff("YYYY", DateSerial(Microsoft.VisualBasic.Mid(Cpr, 5, 2), Microsoft.VisualBasic.Mid(Cpr, 3, 2), Microsoft.VisualBasic.Left(Cpr, 2)), Date)
Avatar billede kabbak Professor
10. september 2008 - 22:03 #2
er du nødt til at have "Microsoft.VisualBasic." foran , det bruger vi jo ikke i VBA, Jeg har ikke VB net, så jeg kan ikke teste.
Avatar billede steensommer Praktikant
10. september 2008 - 22:14 #3
Hej
I min opsætning er jeg nødt til at skrive : Microsoft.VisualBasic.

PERFEKT!
Tak for hjælpen. Svar lige så du kan få point!
vh Steen
Avatar billede kabbak Professor
10. september 2008 - 22:16 #4
et svar ;-))
Avatar billede arne_v Ekspert
11. september 2008 - 00:03 #5
Hvis man vil lave en mere ren .NET loesning saa:

    Function Age(s As String) As Integer
        Dim birthday As DateTime = DateTime.ParseExact(s.Substring(0, 6), "ddMMyy", CultureInfo.InvariantCulture)
        Dim today As DateTime = DateTime.Now
        If now.Month > birthday.Month Or (now.Month = birthday.Month And now.Day >= Birthday.Day) Then
            Return today.Year - birthday.Year
        Else
            Return today.Year - birthday.Year - 1
        End If
    End Function
Avatar billede steensommer Praktikant
11. september 2008 - 00:07 #6
OK ....og hvorledes skal den funktion bruges?
Avatar billede arne_v Ekspert
11. september 2008 - 12:42 #7
FDato = Age(cpr)
Avatar billede arne_v Ekspert
11. september 2008 - 12:43 #8
Der er vist ioevrigt ingen grund til a FDato er Long.
Avatar billede steensommer Praktikant
11. september 2008 - 17:06 #9
Det ser spændende ud men jeg får en fejl ved : CultureInfo......Not declared!!!
Avatar billede arne_v Ekspert
11. september 2008 - 17:37 #10
Du skal importere System.Globalization
Avatar billede steensommer Praktikant
11. september 2008 - 18:56 #11
Øh jeg prøvede på en person født i 1923 hvilket gav en alder på -16
Avatar billede arne_v Ekspert
11. september 2008 - 21:39 #12
Interessant.

Alle under 30 opfattes som 20xx ikke 19xx.

Den er heldigvis nem at fixe:

    Function Age(s As String) As Integer
        Dim birthday As DateTime = DateTime.ParseExact(s.Substring(0, 6), "ddMMyy", CultureInfo.InvariantCulture)
        Dim today As DateTime = DateTime.Now
        Dim n As Integer
        If now.Month > birthday.Month Or (now.Month = birthday.Month And now.Day >= Birthday.Day) Then
            n = today.Year - birthday.Year
        Else
            n = today.Year - birthday.Year - 1
        End If
        n = (n + 100) Mod 100
        Return n
    End Function
Avatar billede steensommer Praktikant
11. september 2008 - 22:15 #13
Det var dejligt - tak for det. Hvda sker der hvis personen er > 100 år ??
Avatar billede arne_v Ekspert
11. september 2008 - 23:09 #14
Saa skal man til at kigge paa de 4 sidste cifre.

Man kan ikke se paa 98 om det er 1898 eller 1998.
Avatar billede steensommer Praktikant
11. september 2008 - 23:45 #15
OK - tak for hjælpen :-)
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