Ergebnis 1 bis 1 von 1
  1. #1
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.710

    Zeiten zu einem Datum addieren - javascript function DateAdd

    Für die Addidion von Zeiten zu einem Datum sind 2 Varianten verbreitet, die beide ihre Vor- und Nachteile haben. Die erste Variante funktioniert über die laufende Anzahl Millisekunden seit dem 1.Jan 1970:
    Code:
    var d=new Date("2011/3/2 23:59:00");
    var ms=d.getTime();
    ms = ms + 2 * 60 * 1000;  //2 Minuten addieren
    d.setTime(ms);
    s=d.toLocaleString();
    Beispiel Online testen
    Was ist, wenn ich einen Monat hinzurechnen möchte. Das ist mit der ersten Variante nicht so einfach zu realisieren, da die Zeitspanne unterschiedlich ist. Sinnvolle Ergebnisse bringt die zweite Methode:
    Code:
    var d=new Date("2011/3/2 23:59:00");
    var Monat=d.getMonth();
    Monat = Monat + 1;
    d.setMonth(Monat);
    s=d.toLocaleString();
    Beispiel Online testen
    Diese Variante funktionert auch wenn zum Monat z.B. 24 addiert wird (Probiert es aus!).
    Weniger bekannt ist, daß diese diese Methode für einige Spezialfälle auch völlig absurde Ergebnisse liefern kann:
    Code:
    var d=new Date("2011/3/27 01:59:00");
    var Minuten=d.getMinutes() + 2;
    d.setMinutes(Minuten);
    s=d.toLocaleString();
    Beispiel Online testen
    Aus 1:59 + 2 Minuten wird hier 1:01. Die erste Variante liefert bei dieser Aufgabe ein sinnvolles Ergebnis. (Einfach probieren, im obigen Link nach Start das Datum mit Strg+C/Strg+V einfügen und RUN betätigen).
    Die folgende Funktion nutzt beide Varianten, für Zeiten bis zur Stunde die erste Variante und für Tage, Wochen.. die zweite Variante. Die Verarbeitung wird intern durch ein Object (pj) gesteuert, daß der fortgeschrittene Scripter anpassen und erweitern kann. Im Gegensatz zu vielen im Netz verfügbaren umfangreichen Scripten lag hier der Schwerpunkt auf hohe Flexibilität und einen geringen Codeumfang.

    Code:
    function DateAdd(dfrom,anz,sel){
    var df = (dfrom || dfrom === 0) ? (typeof dfrom == "string" ? dfrom.replace(/(\d{1,2})\.(\d{1,2})\./,'$2/$1/') : dfrom) : "";
    df = df instanceof Date ? new Date(df-0) : (df === "" ? new Date() : new Date(df));
    var pj = {y:[1,"FullYear"],m:[1,"Month"],w:[7,"Date"],d:[1,"Date"],h:[3600000],n:[60000],s:[1000],ms:[1]};
    var s=pj[sel] || [1];
    var s1 = s[1] || "Time";
    df["set"+s1](df["get"+s1]() + parseInt(anz||0,10) * s[0]);
    return df;
    }
    Die Funktion akzeptiert eine variable Anzahl Parameter. Als erster Parameter wird ein Datum erwartet, daß ein Object vom Typ Datum, ein String oder eine Anzahl Millisekunden sein kann.
    Ohne Parameter oder nur mit einem Leerstring liefert die Funktion die aktuelle Zeit/Datum analog (new Date()).
    Die Beispiele mit DateAdd können ebenfalls online getestet werden, dazu ist zuvor in der obersten Zeile
    http://www.pjunk.de/api/dateadd.js
    einzutragen und 'Script laden' auszuführen.

    Code:
    var jetzt = DateAdd();
    Als String für ein Datum akzeptiert die Funktion alles was auch von "new Date(String)" verarbeitet wird, zusätzlich ein Leerstring "" für die aktuelle Zeit und das in Deutschland verbreitete Datumsformat "dd.mm.yyyy", nutzbar z.B. für die Verarbeitung von Eingaben aus Formularen.
    Code:
    var strDate = "31.12.2011";
    objDate = DateAdd(strDate);
    Die Function führt dabei für die Strings keine strenge Prüfung des Datums durch:
    Code:
    Datum = DateAdd("32.1.2011");  //Liefert Tue Feb 01 2011 00:00:00 GMT+0100
    Mit weiteren Parametern wird ein Zeitversatz realisiert. Der zweite Parameter ist für die Anzahl der Intervalle vorgesehen, negative Werte sind auch zulässig. Als 3.Parameter ist ein String (Selector) für die Einheit anzugeben. Akzeptiert werden 'y'(Jahre), 'm' (Monate),'w' (Wochen),'d' (Tage),'h' (Stunden), 'n' (Minuten),'s' (Sekunden) und 'ms' (Millisekunden).
    Beispiele:
    Code:
    var vor_drei_tagen = DateAdd("",-3,"d");
    var ende = DateAdd("3.10.2011 23:00",3,"h");  //Ergebnis: Tue Oct 04 2011 02:00:00 GMT+0200
    var endfeb=DateAdd("1.3.2011",-1,"d");	//liefert den letzten Tag im Februar 2011
    var Kaufdatum = "25.1.2011";
    var Garantie = DateAdd(Kaufdatum,2,"y");
    Getestet wurde die Funktion DateAdd mit den Browsern FF3.6, IE8, Chrom und Opera.
    Fragen ,Ergänzungen und Kommentare sind wie immer willkommen.
    Geändert von jspit (03-04-2012 um 16:52 Uhr)

Ähnliche Themen

  1. Function mit einem Button starten
    Von new_developer im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 29-04-2010, 14:18
  2. Bild an einem bestimmten Datum ändern?
    Von CuddlyBunny im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 22-08-2009, 12:36
  3. Javascript Warenkorb addieren
    Von sansa1409 im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 23-04-2008, 12:31
  4. Function Datum Datenbank
    Von Alexinfo im Forum JavaScript
    Antworten: 0
    Letzter Beitrag: 28-01-2005, 18:52
  5. Countdown zu einem bestimmten Datum
    Von empe3master im Forum JavaScript
    Antworten: 10
    Letzter Beitrag: 30-11-2004, 21:08

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •