stiki: mit dem alter rechnen

Hallo

Ich versuche in einem teil meines scriptes das alter einer person angeben zu lassen und dann wenn diese älter oder jünger als zb 18 ist soll eine ausgabe kommen.

in meinem script kommt vor:

function phv_berechnen(){
var geburtstag=document.getElementById('geburtstag').value;
var geburtsmonat=document.getElementById('gaburtsmonat').value;
var geburtsjahr=document.getElementById('geburtsjahr').value;

var d = new Date(geburtsjahr, geburtsmonat - 1, geburtstag);

var sekunden = d.getTime();

var heute = new Date();
var sekunden_heute = heute.getTime();

var alter = sekunden_heute - sekunden;

var jahr_in_ms = 365.25 * 24 * 60 * 60 * 1000;

var alter = alter / jahr_in_ms;
/* nur als test   */
if (alter <= 18){
    alert("antwort");
}

-------------------------------------------------------------

Das alter wird so abgefragt (tag und jahr auf´s gleich):

<select name="geburtsmonat" id="geburtsmonat" onchange="phv_berechnen()">
    <option value="">--Bitte Wählen--</option>
    <option value="1">Januar</option>
    <option value="2">Februar</option>
    <option value="3">März</option>
    <option value="4">April</option>
    <option value="5">Mai</option>
    <option value="6">Juni</option>
    <option value="7">Juli</option>
    <option value="8">August</option>
    <option value="9">September</option>
    <option value="10">Oktober</option>
    <option value="11">November</option>
    <option value="12">Dezember</option>
    </select>

-------------------------------------------------------------------

Ich weis nicht wie ich die zahlen angeben muss damit ich sie in den kleiner  abfragen bzw größer gleich nutzen kann.

  1. Hi,

    Ich weis nicht wie ich die zahlen angeben muss damit ich sie in den kleiner  abfragen bzw größer gleich nutzen kann.

    Rechne nicht mit Sekunden herum, und vergleiche gleich Date-Objekte.

    Mit

      var vergleichsDatum = new Date;  
      vergleichsDatum.setUTCFullYear(vergleichsDatum.getUTCFullYear()-18);
    

    kannst du ganz simpel vom aktuellen Datum 18 Jahre abziehen.

    Und dieses Datumsobjekt vergleichst du dann mit dem, dass du dir aus dem Geburtsdatum erzeugt hast.
    (Ggf. möchtest du noch die Uhrzeit des Vergleichsdatums auf einen geeigneten Wert setzen, damit das auch funktioniert, wenn die Person heute auf den Tag genau vor 18 Jahren geboren wurde.)

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hy ChisB

      Das problem ist nicht das alter zu bekommen sondern mit dem angebenen alter zu rechnen. Also wie ich mit den eingegebenen Daten weiter rechnen kann.

      1. Hi,

        Das problem ist nicht das alter zu bekommen

        Das Problem ist, dass du gar nicht nachvollziehbar beschrieben hast, was eigentlich das Problem ist ...

        Das Erzeugen eines Date-Objektes aus den übergebenen Bestandteilen des Geburtsdatums, hat das bereits wie gewünscht funktioniert?

        sondern mit dem angebenen alter zu rechnen. Also wie ich mit den eingegebenen Daten weiter rechnen kann.

        Was willst du denn noch großartig „berechnen“?
        Du vergleichst das Date-Objekt, das das Geburtsdatum darstellt, mit dem Date-Objekt, das das Datum „heute vor 18 Jahren“ darstellt - und *fertig*.

        Wenn du damit jetzt immer noch ein Problem hast, dann beschreibe dieses bitte vernünftig - klar, deutlich und nachvollziehbar.
        </hilfe/charta.htm#tipps-fuer-fragende>

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Ok entschuldigung hatte mein Problem wirklich schlecht erklärt.

          also in meinem Scriptn lasse ich das alter durch

          <select name"geburtstag" id"genurtstag" onchange"berechen()"
          <option value="1">1</option>
          .
          .
          </select>
          <select name"geburtsmonat" id"genurtmonat" onchange"berechen()"
          <option value="2">Februar</option>
          .
          .
          .
          .
          </select>
          <select name"geburtstag" id"genurtsjahr" onchange"berechen()"
          <option value="1987">1987</option>
          .
          .
          .
          .
          </select>

          angeben.

          Aber wenn ich dann durch zb.

          <script type="text/javascript">
          function phv_berechnen(){

          var geburtstag=document.getElementById('geburtstag').value;
               var geburtsmonat=document.getElementById('gaburtsmonat').value;
               var geburtsjahr=document.getElementById('geburtsjahr').value;

          var d = new Date(geburtsjahr, geburtsmonat - 1, geburtstag);
               var sekunden = d.getTime();

          var heute = new Date();
               var sekunden_heute = heute.getTime();

          var alter = sekunden_heute - sekunden;

          var jahr_in_ms = 365.25 * 24 * 60 * 60 * 1000;
               var alter_errechnet = alter / jahr_in_ms;
                          /*wenn alles ausgfählt berechnen!!!*/

          alert(alter\_errechnet);  
          

          }
          </script>

          Kontrolliere ob auch etwas geschieht, passiert leider nichts -.-

          Müssen die angeben also

          <option value="2">Februar</option>

          in andere klammern oder warum bekomme ich keine ausgebe?

          Ps: Hoffe diese Erläuterung ist besser

          1. Hi!

            Aber wenn ich dann durch zb. [...] Kontrolliere ob auch etwas geschieht, passiert leider nichts -.-
            Müssen die angeben also [...] in andere klammern oder warum bekomme ich keine ausgebe?

            Wenn irgendwas nicht so läuft, wie es soll, muss man nicht raten, was man anders machen muss, sondern erst einmal die Stelle finden, wo Wunsch und Wirklichkeit nicht mehr übereinstimmen. Also an welcher Stelle die Variableninhalte nicht mehr wie vorgesehen sind. Dazu kann man Kontrollausgaben einbauen oder Debugging-Tools verwenden, mit denen man schrittweise durch den Code laufen kann. Jeder aktuelle Browser bietet dafür etwas direkt oder als Plugin an.

            Lo!

          2. Hi,

            <script type="text/javascript">
            function phv_berechnen(){

            var geburtstag=document.getElementById('geburtstag').value;
                 var geburtsmonat=document.getElementById('gaburtsmonat').value;
                 var geburtsjahr=document.getElementById('geburtsjahr').value;

            var d = new Date(geburtsjahr, geburtsmonat - 1, geburtstag);

            Hat das bis hier hin wie gewünscht funktioniert? Also, liefert ein anschließendes alert(d) eine Datumsausgabe, die dem angegebenen Datum entspricht?

            var sekunden = d.getTime();

            var heute = new Date();
                 var sekunden_heute = heute.getTime();

            var alter = sekunden_heute - sekunden;

            var jahr_in_ms = 365.25 * 24 * 60 * 60 * 1000;
                 var alter_errechnet = alter / jahr_in_ms;
                            /*wenn alles ausgfählt berechnen!!!*/

            alert(alter_errechnet);

            Noch mal: Wenn du nur prüfen willst, ob älter oder jünger als 18 Jahre, dann kannst du diesen ganzen Berechnungs-Kram entfallen lassen.

            Kontrolliere ob auch etwas geschieht, passiert leider nichts -.-

            Und wie hast du „kontrolliert“?

            Und lerne bitte auch die JavaScript-Fehlerkonsole zu benutzen, falls du dort noch nicht hineingeschaut haben solltest.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          3. Hi,

            <select name"geburtstag" id"genurtstag" onchange"berechen()"
            <select name"geburtsmonat" id"genurtmonat" onchange"berechen()"
            <select name"geburtstag" id"genurtsjahr" onchange"berechen()"

            b und n liegen schon verdammt nahe nebeneinander, wenn man kein Natural-Keyboard hat.
            Ach ja, zwischen Attributname und Atteributwert gehört ein "=".

            var geburtsmonat=document.getElementById('gaburtsmonat').value;

            zwischen e und a liegen s und w - da muß man sich schon sehr anstrengen, um sich so zu vertippen ...

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      2. Hi!

        Das problem ist nicht das alter zu bekommen sondern mit dem angebenen alter zu rechnen. Also wie ich mit den eingegebenen Daten weiter rechnen kann.

        Wenn du mal darüber nachdenkst, was alles in ein Textfeld eingegeben werden kann oder auch, was in einem Select-Option als value drinstehen kann, dann wirst du feststellen, dass das alles mögliche sein kann, beispielsweise: 42, foo, 13b. Mit anderen Worten: Dinge, die wie Zahlen aussehen und solche, die Text sind. Nimmst du nun an, dass der Browser den eingegebenen Wert vorab auswertet und beim Erkennen einer Zahl automatisch eine Typumwandlung in einen Number-Wert ausführt? Nee, macht er nicht. Das musst du schon selbst tun, wenn du eine echte Zahl brauchst, und nicht nur einen String, dessen Inhalt eine Aneinanderreihung von Ziffernzeichen ist.

        Lo!

        1. Nimmst du nun an, dass der Browser den eingegebenen Wert vorab auswertet und beim Erkennen einer Zahl automatisch eine Typumwandlung in einen Number-Wert ausführt? Nee, macht er nicht.

          Doch, JavaScript wandelt immer, wenn ein Operator oder eine Kernmethode eine Zahl erwartet, den Wert automatisch in eine Zahl um.

          Mathias

          1. Hi!

            Nimmst du nun an, dass der Browser den eingegebenen Wert vorab auswertet und beim Erkennen einer Zahl automatisch eine Typumwandlung in einen Number-Wert ausführt? Nee, macht er nicht.
            Doch, JavaScript wandelt immer, wenn ein Operator oder eine Kernmethode eine Zahl erwartet, den Wert automatisch in eine Zahl um.

            Ist "new Date()" eine Kernmethode?

            Lo!

            1. Hi,

              Doch, JavaScript wandelt immer, wenn ein Operator oder eine Kernmethode eine Zahl erwartet, den Wert automatisch in eine Zahl um.

              Ist "new Date()" eine Kernmethode?

              Kernig genug.

              alert(new Date("2011", "09", "08"));
              ergibt in allen von mir getesteten Browsern den 8. Oktober 2011.

              (Tag und Monat so gewählt, dass auch gleich klar ist, dass es auch kein „Oktalsystem-Problem“ an dieser Stelle gibt, wenn Strings verwendet werden.)

              MfG ChrisB

              --
              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            2. JavaScript wandelt immer, wenn ein Operator oder eine Kernmethode eine Zahl erwartet, den Wert automatisch in eine Zahl um.

              Ist "new Date()" eine Kernmethode?

              Ja.

              Daraus:

              »1. Let y be ToNumber(year).
              2. Let m be ToNumber(month).
              3. If date is supplied then let dt be ToNumber(date); else let dt be 1.
              4. If hours is supplied then let h be ToNumber(hours); else let h be 0.
              5. If minutes is supplied then let min be ToNumber(minutes); else let min be 0.
              6. If seconds is supplied then let s be ToNumber(seconds); else let s be 0.
              7. If ms is supplied then let milli be ToNumber(ms); else let milli be 0.
              8. If y is not NaN and 0 ≤ ToInteger(y) ≤ 99, then let yr be 1900+ToInteger(y); otherwise, let yr be y.«

              Mathias

          2. Hi!

            Nimmst du nun an, dass der Browser den eingegebenen Wert vorab auswertet und beim Erkennen einer Zahl automatisch eine Typumwandlung in einen Number-Wert ausführt? Nee, macht er nicht.
            Doch, JavaScript wandelt immer, wenn ein Operator oder eine Kernmethode eine Zahl erwartet, den Wert automatisch in eine Zahl um.

            Das ist übrigens eine andere Baustelle. Der Wert in .value bleibt ein String, und er ändert sich auch nicht, wenn "ein Operator oder eine Kernmethode eine Zahl erwartet". Zum Rechnen und als Funktionsparameter wird eine Kopie des Wertes genommen, und die wird gegebenenfalls konvertiert.

            Lo!

            1. Hi,

              Doch, JavaScript wandelt immer, wenn ein Operator oder eine Kernmethode eine Zahl erwartet, den Wert automatisch in eine Zahl um.

              Das ist übrigens eine andere Baustelle. Der Wert in .value bleibt ein String, und er ändert sich auch nicht, wenn "ein Operator oder eine Kernmethode eine Zahl erwartet".

              Hat jemand was anderes behauptet?
              Du hast „Wert“ in Mathias' Aussage auf .value umgemünzt :-), das wird er aber sicher nicht in der Form gemeint haben.

              Zum Rechnen und als Funktionsparameter wird eine Kopie des Wertes genommen

              Ja. Und dieser Wert wird dann konvertiert, falls nötig.

              MfG ChrisB

              --
              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
              1. Hi!

                Doch, JavaScript wandelt immer, wenn ein Operator oder eine Kernmethode eine Zahl erwartet, den Wert automatisch in eine Zahl um.
                Das ist übrigens eine andere Baustelle. Der Wert in .value bleibt ein String, und er ändert sich auch nicht, wenn "ein Operator oder eine Kernmethode eine Zahl erwartet".
                Hat jemand was anderes behauptet?

                Er widersprach meiner Aussage, und die bezog sich in erster Linie auf den eingegebenenen Wert, also das was in .value steht.

                Zum Rechnen und als Funktionsparameter wird eine Kopie des Wertes genommen
                Ja. Und dieser Wert wird dann konvertiert, falls nötig.

                Und manchmal auch nicht. "23" + "42" ergibt jedenfalls nicht 65. Ich ging davon aus, dass der Date-Konstruktor keine Strings mag, was aber nicht der Fall ist. Somit war meine Aussage zwar in sich richtig, trägt aber nicht zur Findung des eigentlichen Problems bei.

                Lo!

                1. Hi,

                  Hat jemand was anderes behauptet?

                  Er widersprach meiner Aussage, und die bezog sich in erster Linie auf den eingegebenenen Wert, also das was in .value steht.

                  Seine Aussage bezog sich wie ich meine ziemlich eindeutig auf die Stelle, an der der Wert verarbeitet wird.

                  Ja. Und dieser Wert wird dann konvertiert, falls nötig.

                  Und manchmal auch nicht. "23" + "42" ergibt jedenfalls nicht 65.

                  Das liegt aber daran, dass + hier den Stringverkettungsoperator darstellt, und nicht den Additions-Operator.
                  Welcher Operator „gemeint“ ist, wird aus dem Kontext abgeleitet - und damit muss man natürlich aufpassen:

                  // JavaScript is a capricious mistress ...  
                  alert(1+"23"+42); // ergibt 12342  
                  alert(1+23+"42"); // ergibt 2442
                  

                  In so fern hast du grundsätzlich recht, dass man auf der sicheren Seite ist, wenn man explizit dafür sorgt, dass Zahlen, mit denen man rechnen will, auch Zahlen sind. Wobei es an einigen Stellen ausreicht, sich auf die eingebaute Typ-Magie (implizit) zu verlassen - wenn man sich derer bewusst ist.

                  MfG ChrisB

                  --
                  RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                  1. Hi!

                    Hat jemand was anderes behauptet?
                    Er widersprach meiner Aussage, und die bezog sich in erster Linie auf den eingegebenenen Wert, also das was in .value steht.
                    Seine Aussage bezog sich wie ich meine ziemlich eindeutig auf die Stelle, an der der Wert verarbeitet wird.

                    Kann ja, aber deshalb war meine ja nicht falsch, was sein "doch" aber suggerierte. Der eingegebene Wert bleibt nach wie vor ein String. Lediglich bei einigen Weiterverarbeitungen wird eine Kopie erstellt und diese umgewandelt. Wenn der eigentliche Wert ungewandelt würde, könnte man ja anschließend zwei davon addieren und nicht nur verbinden.

                    Lo!

        2. Dinge, die wie Zahlen aussehen und solche, die Text sind. Nimmst du nun an, dass der Browser den eingegebenen Wert vorab auswertet und beim Erkennen einer Zahl automatisch eine Typumwandlung in einen Number-Wert ausführt? Nee, macht er nicht. Das musst du schon selbst tun, wenn du eine echte Zahl brauchst, und nicht nur einen String, dessen Inhalt eine Aneinanderreihung von Ziffernzeichen ist.

          Hyhy

          Und wie mache ich es dann zu einer richtigen Zahl?

          1. Hi!

            Und wie mache ich es dann zu einer richtigen Zahl?

            foo = "42" ist ein String
            foo = "42" * 1 ist eine Zahl.
            foo = "43" + 1 ist ein String.
            foo = http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int@title=parseInt("42") ist eine Zahl.
            foo = http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_float@title=parseFloat("42") ist auch eine Zahl.

            Lies doch einfach mal ne JS Dokumentation. Dann verstehst Du vielelicht auch warum Du nicht rechnen musst ausser vom heutigen Tag 18 Jahre abzuziehen.

            --
            Vergesst Chuck Norris.
            Sponge Bob kann unter Wasser grillen!