Beregne alder præcis

Tags:    asp.net c#

Godaften allesammen

Vil starte med at fortælle at jeg skal bruge min egen alder helt præcist i år, måneder og dage.
Jeg googlede det, og troede jeg havde fundet svaret - da den igår (ganske rigtigt) mente jeg var 26 år, 1 måned, og 25 dage.
Idag beregner algoritmen så blot at jeg er 27 dage (pludselig en dag for meget).

Derfor gik jeg så selv igang med at prøve mig frem.
Jeg har lavet et lille loop for at kunne holde fast i logikken så jeg forstår det.

DATA: fødselsdato : 1985/05/05

At beregne min præcise alder i år er nemt:
Dette gøres ved at se på om jeg har holdt fødselsdag i år, hvilket beregnes således:
Dags måned og dag : 0701
fødsels måned og dag : 0505
Hvis dags måned og dag (tallet) er større end det for fødselsåret, så har jeg haft fødselsdag i år.
Således ved jeg om jeg skal medregne det nuværende år, som et år vi er i.

Fold kodeboks ind/udCSharp kode 


Dette giver ganske rigtigt 26 år.
Nu kommer problemet så til at beregne mine måneder og dage.
Havde i tankerne at se på om dags dato (01) er større end dato'en på min fødselsdag (05), så jeg ved om jeg skal beregne den nuværende måned med.
Har ikke testet det, men havde følgende i tankerne:
Fold kodeboks ind/udCSharp kode 


og nede i mit loop lave følgende:
Fold kodeboks ind/udCSharp kode 


Nu kommer den svære så!
For denne del vil stoppe 05-06-2011:
05 fordi det er min fødselsdato
06 fordi vi ikke er nået til den 05 i denne måned endnu
Og jeg skal så vide jeg skal tælle dagene op til den nye dato.
Men kan ikke helt gennemskue hvordan den sidste del med datoen skal laves for den i fremtiden vil beregne korrekt.

Så er der nogen der kan hjælpe med den del og er der nogen der eventuelt kan lave en form for test for at se om den virker korrekt og vil virke korrekt? (tænker fx på skudår, fødselsdato på specielt svære datoer etc?)

Håber i kan hjælpe mig :)



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Jeg har kanskje lest spørsmålet ditt litt for raskt, men forstår det slik at du egentlig trenger hjelp til å finne antall dager fra 1. januar i år til i dag?!

Mitt tips da er at man kan subtrahere to datoer fra hverandre, og står igjen med et TimeSpan-objekt. TimeSpan vet nøyaktig hvor mange dager det er.

Fold kodeboks ind/udCSharp kode 




Godaften allesammen

Vil starte med at fortælle at jeg skal bruge min egen alder helt præcist i år, måneder og dage.
Jeg googlede det, og troede jeg havde fundet svaret - da den igår (ganske rigtigt) mente jeg var 26 år, 1 måned, og 25 dage.
Idag beregner algoritmen så blot at jeg er 27 dage (pludselig en dag for meget).

Derfor gik jeg så selv igang med at prøve mig frem.
Jeg har lavet et lille loop for at kunne holde fast i logikken så jeg forstår det.

DATA: fødselsdato : 1985/05/05

At beregne min præcise alder i år er nemt:
Dette gøres ved at se på om jeg har holdt fødselsdag i år, hvilket beregnes således:
Dags måned og dag : 0701
fødsels måned og dag : 0505
Hvis dags måned og dag (tallet) er større end det for fødselsåret, så har jeg haft fødselsdag i år.
Således ved jeg om jeg skal medregne det nuværende år, som et år vi er i.

Fold kodeboks ind/udCSharp kode 


Dette giver ganske rigtigt 26 år.
Nu kommer problemet så til at beregne mine måneder og dage.
Havde i tankerne at se på om dags dato (01) er større end dato'en på min fødselsdag (05), så jeg ved om jeg skal beregne den nuværende måned med.
Har ikke testet det, men havde følgende i tankerne:
Fold kodeboks ind/udCSharp kode 


og nede i mit loop lave følgende:
Fold kodeboks ind/udCSharp kode 


Nu kommer den svære så!
For denne del vil stoppe 05-06-2011:
05 fordi det er min fødselsdato
06 fordi vi ikke er nået til den 05 i denne måned endnu
Og jeg skal så vide jeg skal tælle dagene op til den nye dato.
Men kan ikke helt gennemskue hvordan den sidste del med datoen skal laves for den i fremtiden vil beregne korrekt.

Så er der nogen der kan hjælpe med den del og er der nogen der eventuelt kan lave en form for test for at se om den virker korrekt og vil virke korrekt? (tænker fx på skudår, fødselsdato på specielt svære datoer etc?)

Håber i kan hjælpe mig :)


Som Torbjørn siger, kan du trække de to datoer fra hinanden. Der er vist ingen grund til at gøre det sværere:

DateTime start = DateTime.Parse("1985/05/05");
DateTime end = DateTime.Now;
TimeSpan age = end-start;
Console.WriteLine(age.ToString());

Du får antal år ved at dividere age.Days med 365
Med forbehold for at koden ikke virker, er kodet efter hukommelsen.



Indlæg senest redigeret d. 02.07.2011 16:35 af Bruger #2730
Godaften allesammen

Vil starte med at fortælle at jeg skal bruge min egen alder helt præcist i år, måneder og dage.
Jeg googlede det, og troede jeg havde fundet svaret - da den igår (ganske rigtigt) mente jeg var 26 år, 1 måned, og 25 dage.
Idag beregner algoritmen så blot at jeg er 27 dage (pludselig en dag for meget).

Derfor gik jeg så selv igang med at prøve mig frem.
Jeg har lavet et lille loop for at kunne holde fast i logikken så jeg forstår det.

DATA: fødselsdato : 1985/05/05

At beregne min præcise alder i år er nemt:
Dette gøres ved at se på om jeg har holdt fødselsdag i år, hvilket beregnes således:
Dags måned og dag : 0701
fødsels måned og dag : 0505
Hvis dags måned og dag (tallet) er større end det for fødselsåret, så har jeg haft fødselsdag i år.
Således ved jeg om jeg skal medregne det nuværende år, som et år vi er i.

Fold kodeboks ind/udCSharp kode 


Dette giver ganske rigtigt 26 år.
Nu kommer problemet så til at beregne mine måneder og dage.
Havde i tankerne at se på om dags dato (01) er større end dato'en på min fødselsdag (05), så jeg ved om jeg skal beregne den nuværende måned med.
Har ikke testet det, men havde følgende i tankerne:
Fold kodeboks ind/udCSharp kode 


og nede i mit loop lave følgende:
Fold kodeboks ind/udCSharp kode 


Nu kommer den svære så!
For denne del vil stoppe 05-06-2011:
05 fordi det er min fødselsdato
06 fordi vi ikke er nået til den 05 i denne måned endnu
Og jeg skal så vide jeg skal tælle dagene op til den nye dato.
Men kan ikke helt gennemskue hvordan den sidste del med datoen skal laves for den i fremtiden vil beregne korrekt.

Så er der nogen der kan hjælpe med den del og er der nogen der eventuelt kan lave en form for test for at se om den virker korrekt og vil virke korrekt? (tænker fx på skudår, fødselsdato på specielt svære datoer etc?)

Håber i kan hjælpe mig :)


Som Torbjørn siger, kan du trække de to datoer fra hinanden. Der er vist ingen grund til at gøre det sværere:

DateTime start = DateTime.Parse("1985/05/05");
DateTime end = DateTime.Now;
TimeSpan age = end-start;
Console.WriteLine(age.ToString());

Du får antal år ved at dividere age.Days med 365
Med forbehold for at koden ikke virker, er kodet efter hukommelsen.

Og ved skudår er det vel anderledes? Og selvom jeg bruger 365,25 (skudår hver fjerde år), så er der ikke taget højde for præcis hvornår der er skudår og dermed gør beregningen upræcis.

Og med dage siden 1 januar får jeg stadig et problem med at have måneder da jeg så skal se på hvilke måneder har 28,29,30 dage for at være en hel måned.



Alt det tager din DateTime kalender sig af, hvorfor gøre det selv, så det bliver sværere?



Alt det tager din DateTime kalender sig af, hvorfor gøre det selv, så det bliver sværere?

Måske jeg er lidt langsom her, men kan ikke se hvordan jeg ud fra
Fold kodeboks ind/udCSharp kode 

får
26 år, 1 måned, 27 dage.
Så vil høre om du måske vil uddybe dit eksempel lidt så jeg kan få den præcise ønskede alder? :lol:



EDIT:
Har fundet en løsning der er lidt mere optimal og bliver nok min endelige løsning:

Fold kodeboks ind/udCSharp kode 




Indlæg senest redigeret d. 04.07.2011 11:59 af Bruger #16651
t