WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Alter berechnen

 

jediforce
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 18.09.09
Wohnort: Zang
Version: ---
     Beitrag Verfasst am: 21.09.2009, 10:24     Titel: Alter berechnen
  Antworten mit Zitat      
Hi,
ich probier gerade ein alter zuberechnen.
Bis jetzt war meine Idee, einefach als serial datum zu nehmen, subtrahiren und dann die Jahreszahl zu nehmen. Das klappt leider nur halb. Ich tue dann noch 2 Tage drauf rechnen un d dann klappt es für alle Tage bis 92, alles was älter ist muss man nur 1 draufzählen. (zumdienst haben das meine Test bis jetzt ergeben)
Ich hab leider keine Ahnung warum.

Gibt es nicht einen bessern Trick das Alter ausrechnen oder kann mir jeamnd erklären warum des das oben so ist?

Sonst schreib ich halt mithilfe von if, eine kleine Funktion.
Private Nachricht senden Benutzer-Profile anzeigen


Sani
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 03.09.09
Wohnort: Neu-Ulm
Version: R2007b
     Beitrag Verfasst am: 21.09.2009, 11:08     Titel:
  Antworten mit Zitat      
plotte doch mal deinen code vllt ist es nur ein kleiner denkfehler...
_________________

Wer Rechtschreibfehler findet darf sie behalten.
Codefehler bitte melden Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
jediforce
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 18.09.09
Wohnort: Zang
Version: ---
     Beitrag Verfasst am: 21.09.2009, 14:46     Titel:
  Antworten mit Zitat      
naja, wirklich code würd des nicht nenen Very Happy
Also der stimmt jetzt für alles was älter ist als 1991.
Code:
d1 = datenum('21-Sep-1985');

d2=datenum('21-Sep-2018');
d3=d2-d1+1;
datestr(d3)
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.09.2009, 15:29     Titel:
  Antworten mit Zitat      
Hallo, ich würde so machen

Code:

d1 = datevec('21-Sep-1985','dd-mmm-yyyy');
d2 = datevec('21-Sep-2018','dd-mmm-yyyy');

alter=floor(etime(d2,d1)/(3600*24*365))
 
Private Nachricht senden Benutzer-Profile anzeigen
 
jediforce
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 18.09.09
Wohnort: Zang
Version: ---
     Beitrag Verfasst am: 21.09.2009, 15:37     Titel:
  Antworten mit Zitat      
hi, danke für die antowrt. Das ganze auf Basis von sekunden zu berechnen ist auch nicht schlecht (vieleicht kann ich den befehl mal bruachen). Aber ich glaube da kommt das Problem mit den Schaltjahren auf. Wenn man deinen Code eingibt kommt 33 jahre aus, beim testen hab ich festgestllt das er schon 11 tage zufrüh umschaltet.


Aber ich finde es komisch das Matlab für was keine Funktion hat.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.09.2009, 15:50     Titel:
  Antworten mit Zitat      
Stimmt, du hast recht, war auf etime-Befehl fixiert,
aber es geht ja viel einfacher und sollte richtig funktionieren
Code:


d1 = datevec('21-Sep-1985','dd-mmm-yyyy');
d2 = datevec('21-Sep-2018','dd-mmm-yyyy');

d3=d2-d1;

alter=d3(1);

if any(d3(2:end)<0)
   alter=alter-1;
end

 


oder alles in einer Zeile

Code:



d1 = datevec('21-Sep-1985','dd-mmm-yyyy');
d2 = datevec('21-Sep-2018','dd-mmm-yyyy');

d3=d2-d1;

alter=d3(1)-any(d3(2:end)<0);

 


PS: Grenzfälle muss du aber trotzdem abfangen,

1) Datum1 >=Datum2
2) Alter von Kinder unter einem 1 Jahr
3) 29 Februar
Private Nachricht senden Benutzer-Profile anzeigen
 
jediforce
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 18.09.09
Wohnort: Zang
Version: ---
     Beitrag Verfasst am: 22.09.2009, 09:07     Titel:
  Antworten mit Zitat      
Hi,
wenn ich es richtig versthe läuft des Programm so ab:
es rechnet den unterscheid für Tage/Moante Jahre aus. Wenn einer der Tage oder Monate kleine als 0 ist, wird ein jahr abgezogen. Wenn man aber z.b. als Datum den 10. Dezember nimmt. Ist zwar beim Monat ein Minus, aber bei den Tagen nicht. Darum zieht er des Jahr Trotzdem ab.
Mein Vorschlag:
Code:
d1 = datevec('29-Feb-2000','dd-mmm-yyyy');
%d2 = datevec('01-Mar-2009','dd-mmm-yyyy');
d2 = datevec(date);
d3=d2-d1;

alter=d3(1);
 
if (d3(2)<0)      
    alter=alter-1;
elseif((d3(2)==0)&& (d3(3)<0));
    alter=alter-1;
end

if (alter < 1)
    alter=0;
end
 


Die datevec scheint intellignet zu sein, wenn es in einem Jahr den 29.2. gabs wird der eingetragen, wenn nicht wird er durch 1.3. ersetz, also gibt es nur Probs wenn der Mensch etwas falsch eingibt.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 23.09.2009, 02:01     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:
wenn ich es richtig versteh läuft des Programm so ab:
es rechnet den unterschied für Tage/Monate Jahre aus. Wenn einer der Tage oder Monate kleine als 0 ist, wird ein jahr abgezogen.


Richtig.

Aber mit 10.Dezember habe jetzt nicht ganz verstanden,was du meinst?

29.Februar kann man als Geburtsdatum ganz ausschließen, weil registriert in Urkunde wird glaube ich immer 1.3
Private Nachricht senden Benutzer-Profile anzeigen
 
jediforce
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 18.09.09
Wohnort: Zang
Version: ---
     Beitrag Verfasst am: 23.09.2009, 08:28     Titel:
  Antworten mit Zitat      
Okey neuer Versuch, es wir dja abgefragt ob einer der Zahlen kleiner als Null ist.

Wenn man jetzt den 8. Dezember 2000 als auswerte datum nimmt, und am 10. September 1990 geburtstag habe. Als Vektor kommt dann (10,3,-2...) raus. Da eine Zahl kleiner als Null ist, wird eins Abgezogen so ist die Person laut der Anzeige 9 Jahre alt, aber 10.Dezember wird wieder alles richtig angezeigt.

Darum hab ich den Code von dir so verändert das Tage und Moante getrennt abgefragt werden. Bis jetzt hat es immer gepasst, aber vieleicht gibt ja noch mehr Denkfehler von mir. Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 23.09.2009, 10:31     Titel:
  Antworten mit Zitat      
Ach so!

Im Prinzip sollte man sich immer auf Papier zuerst alle Grenzfälle überlegen.
z.b Geburtsdatum ist am 31.Jan.
dann sind Grenzfälle
1) 30. Jan
2) 1.Feb
3) Geburtsjahr gleich Auswertejahr: Alter wird in Monaten eingegeben


Das habe ich leider nicht gemacht und deswegen hast du hier Recht.
Und dein Code scheint bei Grenzfällen 1 und 2 richtig zu funktionieren

Ob du 3 brauchst, ist wohl von Anwendung abhängig
Private Nachricht senden Benutzer-Profile anzeigen
 
jediforce
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 18.09.09
Wohnort: Zang
Version: ---
     Beitrag Verfasst am: 24.09.2009, 08:52     Titel:
  Antworten mit Zitat      
Also noch vielen DANK, ist mirauch erst aufgefallen als ich damit etwas gespielt habe.
Ich denk es ist jetzt alles bedacht und klappt. Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.