Sonja : Wochentag bestimmen

Hallo,

heute habe ich mal richtig viele Fragen :-) . Die nächste ist anhand eines Datums Format (DD.MM.JJJJ) einen Wochentag zu bestimmen.

Auch wenn die Selfhtml Seite Seite offline zu sein scheint: http://forum.de.selfhtml.org/?t=194184&m=1297932 versuche ich mal meinen Ansatz ohne Dokumentationshilfe.

Ich vermute ich muss zuerst den Sting zerlegen in Tag, Monat Jahr zerlegen also.

var yyyy=date.substr(6,4);
var mm=date.substr(3,2);
var dd=date.substr(0,2);

Ich vermute und dann muss ich einen Reffernezpunkt sezten und Zählen oder gibt es da eine einfachere Variante?

  1. Hi!

    Die nächste ist anhand eines Datums Format (DD.MM.JJJJ) einen Wochentag zu bestimmen.

    Bring es zunächst in ein http://de.selfhtml.org/javascript/objekte/date.htm@title=Date-Objekt. Dazu musst du es zerlegen, so wie du es schon begonnen hast, wobei http://de.selfhtml.org/javascript/objekte/string.htm#split@title=split() auch eine Möglichkeit gewesen wäre. Dann kannst du die für die Wochentagsermittlung vorgesehene Methode http://de.selfhtml.org/javascript/objekte/date.htm#get_day@title=getDay() verwenden.

    Lo!

    1. Geniale Idee...

      Für alle die etwas Länger mit ihren Daten zu tun haben, sollten die Kalenderreform von 1582 beachten.

            // Kalenderreform berücksichtigen, d.h. + 10 Tage  
            if(yyyy<1582 || yyyy==1582 && (mm<10 || mm==10 && dd<15))  
            time+=10*24*60*60*1000;
      
      1. ...

        if(yyyy<1582 || yyyy==1582 && (mm<10 || mm==10 && dd<15))
              time+=10*24*60*60*1000;

        ... gefährlich.

        warum nutzt du nicht den Vergleichsoperator "<="?
        Interessant für dich auch:
        http://de.wikipedia.org/wiki/Logischer_Operator

        brillo Agent nr.1

      2. @@Sonja:

        nuqneH

        Für alle die etwas Länger mit ihren Daten zu tun haben, sollten die Kalenderreform von 1582 beachten.

        Und auch beachten, dass diese nur in einem kleinen Teil der Welt 1582 stattfand.

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
  2. (Hallo|Hi(ho)|Tag) Sonja ,

    heute habe ich mal richtig viele Fragen :-) . Die nächste ist anhand eines Datums Format (DD.MM.JJJJ) einen Wochentag zu bestimmen.

    Ich vermute ich muss zuerst den Sting zerlegen in Tag, Monat Jahr zerlegen also.
    ... und dann muss ich einen Reffernezpunkt sezten und Zählen oder gibt es da eine einfachere Variante?

    Du könntest für beide Aufgaben das Date-Objekt benutzen, wenn du den Datumsstring in einem "vernünftigen"
    Format (wie ISO-8601) vorliegen hättest:

      
    var mydate = new Date(Date.parse('2010-01-10'));  
    var dayoftheweek = mydate.getDay();  
    
    

    Allerdings bin ich mir nicht sicher, ob das Date.parse() eines jeden Browsers mit Daten umgehen kann,
    die über einen 32-Bit-Timestamp hinausgehen (ca. 1970 bis 2037). Das Date-Objekt selbst kann das aber.

    Das Zerlegen eines im deutschsprachigen Raum üblichen Datumsstrings kann man sich selbst basteln:

      
    var datestring = String("9.1.2010");  
      
    // parse date string                   -day----       -month--       -year-  
    var matches = datestring.match(/^[^\d]*(\d{1,2})[^\d]+(\d{1,2})[^\d]+(\d{4})([^\d]|$)/);  
      
    // set date object  
    var mydate = new Date();  
    mydate.setFullYear(parseInt(matches[3]));  
    mydate.setMonth(parseInt(matches[2]) - 1); // months count from 0...11  
    mydate.setDate(parseInt(matches[1]));  
      
    // get day of the week 0...6 (sunday, monday, ..., saturday)  
    var dayoftheweek = mydate.getDay();  
      
    
    

    DateJS hat das Zerlegen des Datumsstrings für viele Sprachen schon eingebaut.

    Christian Zeller und Carl Friedrich Gauss haben sich mit diesem Problem beschäftigt und Algorithmen entwickelt,
    mit denen man Wochnentage einfach berechnen konnte, lange bevor jemand an Javascript dachte. ;-)
    Sie lassen sich trotzdem leicht in eine Javascript-Funktion umsetzen:

    http://de.wikipedia.org/wiki/Zellers_Kongruenz
    http://de.wikipedia.org/wiki/Gaußsche_Wochentagsformel

    Eine andere Methode ist die Umwandlung des Kalenderdatums (Jahr, Monat, Tag) in ein Julianisches Datum
    (auch Julianische Tagesnummer). Eine ohne Rest durch Sieben teilbare JDN ist immer ein Sonntag.
    So kann man den Wochentag ganz einfach per Modulo-Division berechnen:

      
    day_of_the_week = (jdn % 7);  
    // 0 : sunday  
    // 1 : monday  
    // ...  
    // 6 : saturday  
    
    

    MffG
    EisFuX