• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Datumsfeld - Eingabe erleichtern

Calvinstefan

New member
Nochmals "Hallo!".

Hier mein zweites Problem des Tages:

Ich muss für ein Datumsfeld die Eingabe erleichtern. Die Leute sind es einfach gewohnt das Datum in Excel-Manier so einzugeben:
3/4 = 03.04.2016
12/8/15 = 12.08.2015
Wie muss ein "beim-Verlassen"-Skript aussehen, um solch eine Eingabe neben den "normalen" (12.08.2015) bzw. dem Datepicker zu ermöglichen?

Danke Euch!

Gruß,
Stefan.
 
Wie muss ein "beim-Verlassen"-Skript aussehen
Du könntest den Inhalt per STRING.split() trennen, dann anhand der Anzahl der erhaltenen Elemente weiter vorgehen. Bei zwei holst du dir das aktuelle Jahr ((new Date()).getFullYear()) und verwendest die anderen beiden als Tag und Monat. Bei dreien verwendest du sie ganz normal.

Aber du musst natürlich noch alle möglichen Seitenfälle berücksichtigen (was passiert bei Vieren? Was passiert bei einem?).
 
Hallooo!

Also ... da es zu dem Formular auch ein Tutorial geben wird, möchte ich einzig und alleine die Möglichkeit mit einem / anbieten. Und das dann mit zwei oder drei Blöcken.
Das Datumsfeld selbst prüft ja schon auf Gültigkeit. Bei Fehleingaben wird es rot.
Ich finde die Eingabe über / eben deshalb hilfreich, weil man sich dann alleine im Ziffernblock bewegen kann.

OK ... dann mal los.

Danke für Deine Ideen!

Gruß,
Stefan.
 
Guten Morgen!

Was ich gestern noch geschafft habe ... funktioniert nicht :-(
"Undefined" sagt die Fehlermeldung. Sehr aufschlussreich!
Siehst Du meinen Fehler? Oder: wie kann ich es besser machen?

Code:
function datumEingabeErleichtern(quelle,valueField){
    var value   = jr_get_value(quelle);
    var wert    = [];
    var anzahl  = 0;
    var datum   = "";
    var teildat = "";
    
    value.split("/", 2);
    anzahl = value.length;
    
    // bei zwei Blöcken, z.B. 4/3 ... Jahr muss ergänzt werden
    if (anzahl == 2) {
        while (anzahl <= 1) {
            teildat = wert[anzahl];
            teildat.lpad("0",2);
            datum = teildat + ".";
            anzahl++;
        }
        datum = datum + (new Date()).getFullYear();
        anzahl = 0;
    }
    
    // bei drei Blöcken, z.B. 4/3/15
    if (anzahl == 3) {
        while (anzahl <= 1) {
            teildat = wert[anzahl];
            teildat.lpad("0",2);
            datum = teildat + ".";
            anzahl++;
        }
        teildat = wert[anzahl];
        datum = teildat + ".";
        // ggf. muss hier noch die eingabe von 15 oder 2015 abgefangen werden.
        anzahl = 0;
    }
    
    // Datum an Feld zurückübergeben
    alert(datum);
    jr_set_value(valueField, datum);
}

Danke.

Gruß,
Stefan.
 
Hallo!

Also bei mir führt folgendes zum gewünschten Erfolg:

Code:
function datumEingabeErleichtern(quelle,valueField){
    var value   = jr_get_value(quelle);
    var wert    = [];
    var anzahl  = 0;
    var datum   = "";
    var teildat = "";
    var i       = 0;

    wert = value.split("/", 3);
    anzahl = wert.length;

    if (anzahl < 2 || anzahl > 3) {
    return;
    }

    // bei zwei Blöcken, z.B. 4/3 ... Jahr muss ergänzt werden
    if (anzahl == 2) {
        do {
            teildat = ('00'+wert[i]).substring(wert[i].length);
            wert[i] = teildat + ".";
            i++;
        } while (i < anzahl);
        wert[2] = (new Date()).getFullYear();
    }
    
    // bei drei Blöcken, z.B. 4/3/15
    if (anzahl == 3) {
        do {
            teildat = ('00'+wert[i]).substring(wert[i].length);
            wert[i] = teildat + ".";
            i++;
        } while (i < anzahl - 1);
            //Eingabe des Jahres in zwei und vier Stellen abfangen - 15 / 2015
            teildat = ('00'+wert[i]).substring(wert[i].length);
            wert[i] = "20" + teildat;
    }

    // Datum an Feld zurückübergeben
    jr_set_value(valueField, new Date(wert[2],wert[1]-1,wert[0]));
    jr_set_value(quelle, "");
}

Gab einige Punkte, an denen ich ziemlich zu knabbern hatte. Aber das Web und ein Pott voll starkem Kaffee haben dann weitergeholfen!
Klar, ist nicht die Optimallödung. Es gibt noch eine Reihe an Fehleingaben, die abgefangen werden müssten. Aber mal ehrlich: was schützt schon vor dem DAU?! Nichts.
Und deshalb starte ich jetzt mal mit diesem Code.

Verbesserungsvorschläge? Ja bitte gerne!! :)

Gruß,
Stefan.
 
Verbesserungsvorschläge? Ja bitte gerne!! :)
Wenn deine jr_set_value() sowieso ein Date-Objekt als Argument erwartet, kannst du dir die ganze Formatierung der Zahlen sparen...
Code:
function datumEingabeErleichtern(quelle,valueField){
    var value   = jr_get_value(quelle);
    var wert    = [];
    var anzahl  = 0;
    var datum   = "";
    var teildat = "";
    var i       = 0;

    wert = value.split("/", 3);
    anzahl = wert.length;

    if (anzahl < 2 || anzahl > 3){
		return;
    }

    // bei zwei Blöcken, z.B. 4/3 ... Jahr muss ergänzt werden
    if (anzahl == 2) {
        wert[2] = (new Date()).getFullYear();
    }
    
    // bei drei Blöcken, z.B. 4/3/15
    if (anzahl === 3){
		wert[2] = "2000".substring(0, 4 - wert[2].length) + wert[2]
    }

    // Datum an Feld zurückübergeben
    jr_set_value(valueField, new Date(wert[2],wert[1]-1,wert[0]));
    jr_set_value(quelle, "");
}
 
Zurück
Oben