JavaScript Zahl X aufs Jahr hochrechnen - Eingabezeitraum variabel

Tr@shMaster

Cadet 4th Year
Registriert
Dez. 2009
Beiträge
120
Hallo,

Ich probiere momentan, mit JS folgendes zu realisieren:
Ein kleines Formular. Man soll 2 Daten eingeben können, um den Zeitraum einzugrenzen, in dem Wert x ermittelt Wurde. Nachdem man alles eingegeben hat, soll Wert x auf ein Jahr, also 365 Tage hochgerechnet werden.

Leider scheitere ich schon daran, aus Datum 1 und 2 die Differenz in Tagen zu ermitteln. Ist das mit JS überhaupt so möglich? Das Ganze soll nach folgendem Schema ablaufen:

Datum 1:01.11.2012
Datum 2:01.01.2013
Wert, der in diesen Tagen angefallen ist: 10

Dann müsste das Script halt die Differenz in Tagen zwischen den beiden Daten ermitteln, 10 durch diese teilen und mit 365 multiplizieren. Bei Fehleingaben soll eine Fehlermeldung ausgegeben werden.

Ich hoffe mir kann hier jemand helfen und ich habe mich nicht zu wirr ausgedrückt...
 
Mit der Methode getTime() erhälst du die vergangene Zeit in ms seit dem 01.01.1970. Den Delta Wert der beiden Datumsangaben erhälst du durch Subtrahierung. Diesen Wert wiederrum kannst du dann in Tage umrechnen.
Code:
var a = new Date(),
b = new Date(2009, 5, 6),
minutes = 1000*60,
hours = minutes*60,
days = hours*24,
years = days*365,  
deltaDays = (a - b) / days, // Tage
deltaYears = (a - b) / years; // Jahre

document.body.innerHTML = deltaYears;

Zum Abschluss dann noch Runden
 
Zuletzt bearbeitet:
Moin,

Das klingt doch schonmal sehr gut...werde ich gleich direkt mal ausprobieren. Vielen Dank!

Ist es denn auch möglich, die Daten im normalen Format wie z.B. 31.12.2012 in ein Textfeld einzugeben? Weil unter JS muss man ja wohl einiges "drehen" mit dem Format, habe ich so mitbekommen.
 
Edit: Ups, hab dein Post falsch gelesen gehabt. Mal neugemacht. :)

Du hast dazu 2 Möglichkeiten

1) Auf externe Bibliotheken zurückgreifen
2) Dich HTML5 und etwas Javascript bedienen.


HTML5 bietet dir ein Inputfield Date an. Klickt der Benutzer drauf, dann wird der native Kalender des Browsers dargestellt. Man kann also gar keinen Quatsch mehr eingeben.
Das liest du aus und werkelst dir das intern zurecht, wie du es magst.

Nachteil ist allerdings die abwärtskompatibilität. Bei einem Textfield müsstet du dann per JavaScript selbst validieren, ob das Format stimmt.
 
Zuletzt bearbeitet:
Du kannst Problemlos schon Date input von HTML5 nutzen. Alle anderen Browser, die es nicht unterstützen, stellen das input als ein normales Textfeld dar.

Code:
  //Feature Unterscheidung
   function support(type) {
     var i = document.createElement('input');
     i.setAttribute('type', type);
     return i.type === type; // false, wenn der Browser es nicht kennt
   }

   if (support('date')) {
       // Code für moderne Browser
   }else {
       //Fallback
   }
 
OK, super. Das ist soweit alles klar.

Gibt es in JS die möglichkeit, wenn ein User zB in eine Input Box folgendes eingibt "20.10.2011", dies folgendermaßen automatisch zu zerlegen.
Code:
var x = 20;
var y = 10;
var z = 2011;

Dass man quasi die Punkte entfernt und in var x die ersten beiden Zeichen, var y zeichen 3 und 4 und in var z den Rest berücksichtigt?
Ich hoffe, ihr versteht, wie ich das meine?
 
Das geht einfach per split() Methode.
Code:
var datum = "20.10.2011";
var daten = datum.split(".");

Dann ist daten eine Array in der 20, 10 und 2011 steht.
daten[0] ist dann "20"
daten[1] ist "10" usw.
 
Super, das klingt schonmal sehr gut! Werde ich auch gleich sofort ausprobieren!

Nur mal angenommen, der User würde das Datum in der Form 20102011 eingeben, also ohne Trennzeichen.
Gibt es auch hierbei eine Möglichkeit, das Ganze aufzuteilen?
 
Klar, mit substring. Dazu musst du die Nutzereingabe aber erst einmal "identifizieren", d.h. ob er nun Punkte gesetzt hat oder nicht. Das geht ganz primitiv mit indexOf oder etwas anspruchsvoller mit regular expressions.
 
Zurück
Oben