Javascript ist Toll!

5. September 2005 - 09:22

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

///////////////////////////////////////////////////////////
//
// 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

Gib ein Datum in der Form TT.MM.JJJJ ein:
Ausgabe:

ähnliche Artikel

  • 18. November 2011 -- LED Editor (1)

    LED Scroller Chareditor Dieses Skript dient zum...

  • 13. Mai 2009 -- String Erweiterungen (5)

    Eine der Eigenschaften von Javascript, die sie von...

  • 29. April 2009 -- Online Molmassen Rechner (29)

    Ein kleines Javascript aus der Welt der Chemie. Der...

Comments (7)
12125 mal gelesen.

7 Kommentare

Leave a comment »

Seiten:

1. Kommentar von: seth
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

2. Kommentar von: Struppi
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.

3. Kommentar von: Struppi
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);

4. Pingback von: String Erweiterungen [Javascript ist Toll!]
8. November 2009: 12:31

[…] Diese Methode beruht auf der string2date()-Funktion […]

5. Kommentar von: StefanD
24. März 2010: 14:27

Habt ihr mal den 30.02.2010 eingegeben ?

6. Kommentar von: Struppi
24. März 2010: 15:23

wieso?
Das ist ein ungültiges Datum, also sollte null oder ein Leerstring rauskommen. Bei dir nicht?

7. Kommentar von: Michael Schwark
1. Juli 2011: 1:27

Liebe Leute,

ihr wisst ja gar nicht, wie glücklich mich das macht gerade. Genau so etwas habe ich gesucht! Leider bin ich nur in HTML, CSS2 und ein wenig, klein wenig in Jaca(cript) fit, deshalb habe ich eine Frage.
Ich habe ein Formular programmiert, mit dem Besucher einer Website 2 Daten, ein Anreise und ein Abreisedatum eingeben können, momentan werden die zwei Felder auf 10 Zeichen begrenzt und ich habe es nach 2 Wochen geschafft, die Felder auf 10 Zeichen zu begrenzen und alle Werte bis auf ganze Zahlen und Punkt, Schrägstrich, Bindestrich einzugrenzen. Das Feld ist leer, wird während der Eingabe bereits abgeprüft. Was ich gern wollte, war, dass, wenn die Daten eingegeben werden, beim Verlassen der Felder das Datum so formatiert wird, wie es hier passiert, aber ohne noch einen Check Button zu klicken, sozusagen müsste die Prüfung und – insofern korrekt – die Formatierung bei „onBlur“ erfolgen. Auch bräuchte ich ausschließlich die Formatierung ab Tag bis zum Jahr, nicht darüber hinaus.

Momentan sieht mein Code so aus:

<blockquote cite="
„>

Hat jemand von Euch eine Idee, wie genau ich Eure Idee hier in mein Projekt aufnehmen könnte und dürfte ich, wenn ich einen Link zu Euch positioniere/ die Credits klarstelle, auf Eure Hilfe zurückgreifen? Das wäre supertoll, denn ich bin wirklich ziemlich aufgeschmissen.

Liebe Grüße und Danke für die Idee! Micha

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Powered by WordPress Stop Spam Harvesters, Join Project Honey Pot
marketing-bankruptcy
marketing-bankruptcy
marketing-bankruptcy
marketing-bankruptcy