Karsten: Wochentag minus 3 Monate

Hallo,

Ich bin auf der Suche nach einer Method um folgende Problemstellung zu lösen

Heute ist Donnerstag, welches Datum hatte der Donnerstag vor 3 Monaten?

Gibt es hiefuer eine elegante Lösung, wäre sehr dankbar für Vorschläge.

Gruss,
Karsten

  1. @@Karsten:

    nuqneH

    Heute ist Donnerstag, welches Datum hatte der Donnerstag vor 3 Monaten?

    Vor 3 Monaten heißt vor 60, 61 bzw. 62 Tagen. Da war kein Donnerstag.

    Welchen Donnerstag meinst du? Den vor 63 Tagen?

    Qapla'

    --
    „Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.“ (Antoine de Saint-Exupéry)
    1. @@Gunnar Bittersmann:

      nuqneH

      Vor 3 Monaten heißt vor 60, 61 bzw. 62 Tagen.

      Mit auf dem Kopf stehenden 6en. Also vor 90, 91 bzw. 92 Tagen.

      Dann soll's wohl der Donnerstag vor 91 Tagen sein?

      Qapla'

      --
      „Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.“ (Antoine de Saint-Exupéry)
      1. Mit auf dem Kopf stehenden 6en. Also vor 90, 91 bzw. 92 Tagen.

        Immerhin bin ich nicht der einzige, dessen Konzentration gerade nachlässt :D

      2. @@Gunnar Bittersmann:

        nuqneH

        Mit auf dem Kopf stehenden 6en. Also vor 90, 91 bzw. 92 Tagen.

        Oder vor 89. Wie recht 1UnitedPower doch hat.

        Qapla'

        --
        „Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.“ (Antoine de Saint-Exupéry)
  2. Heute ist Donnerstag, welches Datum hatte der Donnerstag vor 3 Monaten?

    Gibt es hiefuer eine elegante Lösung, wäre sehr dankbar für Vorschläge.

    1. aktuellen Zeitstempel holen
    2. 3 Wochen abziehen ( now - 3600 * 24 * 21 )
    3. mit dem Date-Objekt das Datum auslesen

      1. 3 Wochen abziehen ( now - 3600 * 24 * 21 )

      Ark es ging ja Monate. Aber die vorgehensweise ist die selbe, wenn du denn weißt welches Datum du eigentlich willst.

      1. Tach!

        1. 3 Wochen abziehen ( now - 3600 * 24 * 21 )
          Ark es ging ja Monate. Aber die vorgehensweise ist die selbe, wenn du denn weißt welches Datum du eigentlich willst.

        So einfach geht es nicht, denn es gibt schließlich Tage mit mehr und weniger als 24 Stunden. Eine Rechnung mit einer festen Anzahl von Zeiteinheiten pro Tag geht nur mit UTC.

        dedlfix.

        1. So einfach geht es nicht, denn es gibt schließlich Tage mit mehr und weniger als 24 Stunden. Eine Rechnung mit einer festen Anzahl von Zeiteinheiten pro Tag geht nur mit UTC.

          Mal abgesehen von virtuellen Planetarien oder Webauftritten der NASA wird UTC auch ausreichen.

  3. Heute ist Donnerstag, welches Datum hatte der Donnerstag vor 3 Monaten?

    Interessante Frage. Zuerst dachte ich, wenn heute der dritte Donnerstag des Monats November ist, kann nur der dritte Donnerstag im August gemeint sein.

    Problem, wenn es der fünfte Donnerstag ist (29.11.2012). Vor drei Monaten gab es keinen fünften Donnerstag.

    Also muss man eine Näherungslösung finden.

    1. Wo soll die Suche starten? Heute ist der 15. Tag des Monats 11. Du musst also den 15. Tag des Monats 8 finden und den Wochentag bestimmen.

    2. Sonderproblematik, wenn ein Jahreswechsel dazwischen liegt.

    3. Solange kein Do, den nächsten Tag abwechselnd vorwärts und rückwärts suchen.

    also Tag +1, -1, +2, -2, ...

    Der 15.08. war Mi, beim ersten Schritt +1 ergibt sich ein Do, es ist der 16.8.

    4. Sonderproblematik, wenn bei der Suche ein Monats- oder Jahreswechsel passiert.

    Rudi

    1. @@Rudi Ratgeber:

      nuqneH

      Interessante Frage. Zuerst dachte ich, wenn heute der dritte Donnerstag des Monats November ist, kann nur der dritte Donnerstag im August gemeint sein.
      Problem, wenn es der fünfte Donnerstag ist (29.11.2012). Vor drei Monaten gab es keinen fünften Donnerstag.

      Das ist nicht das einzige Problem. Nehmen wir mal nicht Donnerstag, sondern Mittwoch. Der 14.11.2012 ist der zweite im Monat. Der zweite Mittwoch im August ist aber der 08.08.2012. „Vor 3 Monaten“ wäre aber eher der 15.08.2012, also der dritte Mittwoch im Monat.

      Der Ansatz ist eher untauglich. Und auch zu kompliziert. Es geht einfacher.

      1. Sonderproblematik, wenn ein Jahreswechsel dazwischen liegt.
      2. Sonderproblematik, wenn bei der Suche ein Monats- oder Jahreswechsel passiert.

      Inwiefern?

      Qapla'

      --
      „Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.“ (Antoine de Saint-Exupéry)
      1. Der Ansatz ist eher untauglich. Und auch zu kompliziert. Es geht einfacher.

        Hatte ich schon gelesen ...
        Dann soll's wohl der Donnerstag vor 91 Tagen sein?

        ... aber es hatte nicht "geklickert", dass diese Zahl durch 7 teilbar ist, also immer auf denselben Wochentag fallen **muss**

        Rudi

  4. Moin!

    Wie Du siehst hast Du Dein Problem nicht genau genug geschildert. Wahrscheinlich weil Dir gar nicht bewusst war, welche Hürden zu nehmen sind. Evtl hättest Du dann sogar selbst schon eine Lösung.

    Zuerstmal: Wie genau definiert sich Donnerstag vor 3 Monaten? Was sind 3 Monate bei dieser Frage? 3x4 Wochen? 30 Tage? Manche Monate haben allerdings einen bestimmten Wochentag 5x. Einfach 3 Monate zurück und jeweils den ersten, vorletzen, letzten ... Donnerstag? oder den 1, 2 oder 5 Donnerstag?

    Zeitspiele sind immer kompliziert. Die meisten Leute verstehen auch gar nicht warum. Ich habe beruflich mit Reporting zu tun. Immer wieder will jemand den Report von heute oder dieser Woche, der auch Last Year Zahlen enthält) mit dem eigentlichen Report vom letzten Jahr vergleichen und bekommt komische Ergebnisse. Dann werd ich angerufen und muß mal wieder erklären. Wir haben  intern die Vorgabe, daß Last Year einfach und stur immer 365 Tage zurück sind. Daß man damit natürlich im Last Year heute (16.11.2012) andere Zahlen bekommt als am 3. Freitag letztes Jahr ist klar. Aber auch der 16.11.2011 liefert andere Zahlen (isn Mittwoch gewesen). Der 17.11.2011 ist Last Year. War ein Donnerstag. Fragt man also nächsten Montag gibts ganz komische Zahlen weils ein Sonntag war.

    --
    Signaturen sind blöd!
  5. Hallo Karsten,

    du könntest vom heutigen Datum drei Monate abziehen, und anschließend die Wochentage angleichen, indem die fehlenden Tage entfernt werden.

    Beispiel:

    var date  = new Date();    // heute
    var day   = date.getDay(); // aktueller wochentag

    date.setMonth(date.getMonth() - 3);
    date.setDate(date.getDate() + (day - date.getDay()));

    alert(date);

    Wenn es ein Donnerstag sein muss, dann setze day auf 4 für Donnerstag (siehe selfhtml).