From 8ee89b95149768690e3b09ba19b59b93986fbc1e Mon Sep 17 00:00:00 2001 From: "G. Richardson" Date: Tue, 21 Oct 2014 02:07:07 +0200 Subject: [PATCH] Schnelle Datumseingabe ohne Trenner MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Buchhalter sind es gewohnt, das Datum im Nummernblock ohne Punkte eingeben zu können, z.B. wird aus 01122014 -> 01.12.2014 Mit diesem Patch wird im Datumsfeld noch vor der Prüfung auf ein gültiges Datumsformat per Javascript geprüft, ob * die Eingabe nur aus Zahlen besteht * das Datumsformat dd.mm.yy, dd-mm-yy oder mm-dd-yy ist Trifft dies zu, werden am Beispiel für den Fall dd.mm.yy folgende Umwandlungen durchgeführt: 8 Zahlen: 31122014 -> 31.12.2014 6 Zahlen: 311214 -> 31.12.2014 4 Zahlen: 3112 -> 31.12.2014 aktuelles Jahr wird angenommen 1-2 Zahlen: 12 -> 31.10.2014 aktueller Monat wird angenommen 7 -> 07.10.2014 aktueller Monat wird angenommen Nach der Umwandlung findet wie bisher eine (simple) Plausibilitätsprüfung des Datums per Javascript statt. Sollte das Datumsfeld andere Datumsfelder beeinflussen, wie z.B. das Rechnungsdatum das Fälligkeitsdatum im Ein- und Verkauf durch ein onChange, muß hier eventuell mit einem setTimeOut gearbeitet werden, da ansonsten der Wert vor der Umwandlung genommen wird. --- js/common.js | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/js/common.js b/js/common.js index 916011503..3a855299f 100644 --- a/js/common.js +++ b/js/common.js @@ -64,6 +64,46 @@ function check_right_date_format(input_name) { if(input_name.value == "") { return true; } + + if ( ( input_name.value.match(/^\d+$/ ) ) && !(dateFormat.lastIndexOf("y") == 3) ) { + // date shortcuts for entering date without separator for three date styles, e.g. + // 31122014 -> 12.04.2014 + // 12312014 -> 12/31/2014 + // 31122014 -> 31/12/2014 + + if (input_name.value.match(/^\d{8}$/)) { + input_name.value = input_name.value.replace(/^(\d\d)(\d\d)(\d\d\d\d)$/, "$1" + seperator + "$2" + seperator + "$3") + } else if (input_name.value.match(/^\d{6}$/)) { + // 120414 -> 12.04.2014 + input_name.value = input_name.value.replace(/^(\d\d)(\d\d)(\d\d)$/, "$1" + seperator + "$2" + seperator + "$3") + } else if (input_name.value.match(/^\d{4}$/)) { + // 1204 -> 12.04.2014 + var today = new Date(); + var year = today.getYear(); + if (year < 999) year += 1900; + input_name.value = input_name.value.replace(/^(\d\d)(\d\d)$/, "$1" + seperator + "$2"); + input_name.value = input_name.value + seperator + year; + } else if ( input_name.value.match(/^\d{1,2}$/ ) ) { + // assume the entry is the day of the current month and current year + var today = new Date(); + var day = input_name.value; + var month = today.getMonth() + 1; + var year = today.getYear(); + if( day.length == 1 && day < 10) { + day='0'+day; + }; + if(month<10) { + month='0'+month; + }; + if (year < 999) year += 1900; + if ( dateFormat.lastIndexOf("d") == 1) { + input_name.value = day + seperator + month + seperator + year; + } else { + input_name.value = month + seperator + day + seperator + year; + } + }; + } + var matching = new RegExp(dateFormat.replace(/\w/g, '\\d') + "\$","ig"); if(!(dateFormat.lastIndexOf("y") == 3) && !matching.test(input_name.value)) { matching = new RegExp(dateFormat.replace(/\w/g, '\\d') + '\\d\\d\$', "ig"); -- 2.20.1