Datum prüfen
Beschreibung
Um ein Datum auf Gültigkeit zu prüfen muss die Eingabe zuerst zerlegt werden.
Die Funktion string2date() geht von der typisch deutschen Form TT.MM.JJJJ aus, wobei die Trennzeichen auch ein Minuszeichen oder Schrägstrich sein können.
Die Eingabe wird an den Trennzeichen gesplittet und daraus dann ein Date() Objekt erstellt. Als nächstes wird der Tag, Monat und das Jahr mit der Eingabe verglichen, stimmen alle Werte überein, wird das Date Objekt zurückgegeben, wenn nicht null
Der Code
javascript
/////////////////////////////////////////////////////////// |
// |
// string2date(string) |
// |
// string => TT.MM.YYYY HH:MM:SS |
// Das Trennzeichen kann ein: "./-" sein |
// prüft einen String auf ein gültiges Datum |
// gibt ein Datum Objekt oder null zurück |
function string2date(string) { |
if(!string) return null; |
string += ''; |
string = string.replace(/[-\/]/g, '.'); // Trennzeichen normalisieren |
string = string.replace(/[^0-9.: ]/g, ''); // ungültige Zeichen entfernen |
string = string.replace(/ +/g, ' '); // doppelte Leerzeichen entfernen |
var uhr = string.split(" "); // Uhrzeit abtrennen |
var split = uhr[0].split("."); |
var day = parseInt(split[0], 10); |
var month = parseInt(split[1] || 0, 10); |
var year = parseInt(split[2] || 0, 10); |
if(isNaN(year)) year = getFullYear(); |
var check = new Date(year, month - 1, day); |
if(uhr[1]) { |
var uhr = uhr[1].split(':'); |
check.setHours( uhr[0] || 0 ); |
check.setMinutes( uhr[1] || 0 ); |
check.setSeconds( uhr[2] || 0 ); |
} |
var day2 = check.getDate(); |
var year2 = getFullYear(check); |
var month2 = check.getMonth() + 1; |
return ( year2 == year && month == month2 && day == day2 ) ? check |
: null; |
} |
function getFullYear(date){ |
if(!date) date = new Date(); |
if(typeof date.getFullYear != 'undefined') return date.getFullYear(); |
var year = date.getYear(); |
if(year < 1000) year += 2000; |
return year; |
} |
Beispiel
Comments (6)
7119 mal gelesen.
7119 mal gelesen.


6 Kommentare Einen Kommentar hinterlassen »
Pingbacks
String Erweiterungen [Javascript ist Toll!]
[...] Diese Methode beruht auf der string2date()-Funktion [...]
Kommentare
Freitag 24.März 2006: 14:33
gudn tach!
#15 string = string.replace(/[-/]/g, '.'); // Trennzeichen normaliesieren
1. s/normaliesieren/normalisieren/
2. dann laesst man allerdings auch sowas wie "12.12/2000" zu. ich wuerde zusaetzlich pruefen, ob die trennzeichen identisch sind.
#16 string = string.replace(/[^0-9^\.^\:^ ]/g, ''); // ungültige Zeichen entfernen
jetzt wird's holprig. ^ negiert eine _komplette_ zeichenklasse, maskierungen sind nicht noetig, also:
/[^0-9.: ]/
#18 var uhr = string.split(" "); // Uhrzeit abtrennen
nach iso (und din) wird die uhrzeit mit einem T vom restlichen datum abgetrennt. naja, und die reihenfolge waere sowieso yyyy-mm-dd...
prost
seth
Freitag 24.März 2006: 15:31
Joh, danke. Hab's eingebaut.
Wobei ich noch in den Errorlogs gesehen habe, dass:
#15 string = string.replace(/[-/]/g, '.');
/ von manchen Browsern maskiert werden möchte.
Freitag 24.März 2006: 15:35
Ja, DIN ist das nicht, schrub ich ja, auch wenn ich mittlerweile oft das ISO Format verwende, das TT.MM.JJJJ Format fällt mir immer noch leichter.
Allerdings sollte das anpassen an ISO nicht schwer sein, dazu müssen nur diese Zeilen geändert werden:
var day = parseInt(split[0], 10);
var year = parseInt(split[2] || 0, 10);
In:
var day = parseInt(split[2], 10);
var year = parseInt(split[0] || 0, 10);
Mittwoch 24.März 2010: 14:27
Habt ihr mal den 30.02.2010 eingegeben ?
Mittwoch 24.März 2010: 15:23
wieso?
Das ist ein ungültiges Datum, also sollte null oder ein Leerstring rauskommen. Bei dir nicht?
Einen Kommentar hinterlassen