DerKleineEisbaer Geschrieben 20. März 2014 Teilen Geschrieben 20. März 2014 Hallo Zusammen, folgende Aufgabe stellt sich mir: Es soll in einer Schnittstelle, welche u.a.52 Wochenfelder beinhaltet, für jede Woche, die von einer Verkaufsaktion betroffen ist, ein Flag gesetzt werden. Das bedeutet also, dass wenn eine Verkaufsaktion vom 13. bis zum 23. März 2014 läuft, zwei Wochen angekreuzt werden müssen, da sowohl die 11. als auch die 12. Kalenderwoche von der Aktion betroffen sind. In der Schnittstelle geht es einfach um die fortlaufenden Wochen (bis max. 52), es müssen als nur jeweils ein Kreuz in den ersten beiden Wochenfeldern gesetzt werden. Als "betroffen" gilt eine Woche, wenn in ihr an mindestens einem normalen Werktag (Mo - Fr) die Verkaufsaktion stattfindet. Nun kann eine 10tägige Verkaufsaktionsdauer aber auch über 3 Wochen verteilt stattfinden, z.B. vom 14.03. bis 24.03.2014. In der 11. KW ist ein Freitag, in der 13. KW der Montag und in der 12. KW dazwischen sind alle Werktage betroffen. Man kann also nicht einfach 10 Tage durch 7 Tage teilen, und meinen, dass dann zwei Wochen betroffen sein müssten. Im Programm habe ich die Möglichkeit, mir über eine Funktion die Anzahl von Tagen bzw. (ganzen) Wochen zwischen zwei Datümern (von/bis) geben zu lassen. Außerdem steht mir eine Funktion zur Verfügung, die mir zu jedem beliebigen Datum den Wochentag (also Mo, Die, Mi ...) zurückgibt. Reicht das aus, um meine Aufgabe zu lösen? Wenn ja, fällt jemandem ein Algorithmus für diese Aufgabe ein? Vielen Dank für Eure Ideen! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
larsson Geschrieben 21. März 2014 Teilen Geschrieben 21. März 2014 (bearbeitet) Was spricht denn gegen den einfachsten Ansatz: Über jede der 52 Wochen einzeln iterieren, das Datum des ersten Tags der Woche bestimmen (evtl. schon vorher aus einer Liste) und dann abgleichen, ob Tag bis Tag + 6 sich in einer Verkaufsaktion befindet. Genauso könntest du über jeden der 365 Tage iterieren und dann mit dem jeweiligen Datum im Verkaufsaktionenkalender vergleichen. Alternativ könntest du das Startdatum und Enddatum (bei mehr als 7 Tagen immer Startdatum +6) von bekannten Verkaufsaktionen in seine 365-Tages-Version umwandeln (entweder per Algorithmus oder aus einer vorgefertigten Liste. Dann musst du nurnoch die Nummer des Tages per floor division durch 7 teilen und die Woche markieren. Gruß, Larsson Bearbeitet 21. März 2014 von larsson Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
larsson Geschrieben 21. März 2014 Teilen Geschrieben 21. März 2014 (bearbeitet) P.S.: Hängt ein bisschen von der benutzten Sprache ab aber oft gibt's fertige Lösungen für die Konvertierung. In Python wäre Datum zu Tag des Jahres zum Beispiel: day_of_year = datetime.datetime.now().timetuple().tm_yday Gruß P.S.: Mir fällt grade auf, dass durch 7 teilen ja nonsense ist. Man muss das Datum des ersten Tages der ersten Woche im Jahr wissen und je nach Wochentag die Differenz addieren. Wahrscheinlich gibt es in deiner Programmiersprache eine Standardbibliothek, die den derzeitigen Tag mit Wochennummer etc ausgibt, da würde ich erstmal nachschauen. In Python: year, week, day = datetime.datetime.now().isocalendar() Bearbeitet 21. März 2014 von larsson Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 21. März 2014 Teilen Geschrieben 21. März 2014 (bearbeitet) @lars (DerkleineEisbär) hast du eine Funktion, die dir zurückgibt welche Woche das Datum ist? Wenn ja dann hast du 3 Schritte. a) herrausfinden wann die Woche beginnt bei der Funktion (Wochenbeginn = Montag oder Sonntag?) 1.) Wochentag und Woche des Anfangsdatums berechnen wenn Wochentag = Werktag (Achtung wegen Sonntag/Montag) KW in Variable speichern ansonsten KW=KW+1 2.) das gleiche für Enddatum tun KW auch in Variable speichern (eventuell KW-1) 3.) für alle KW von (KW-Anfang) bis (KW-Ende) die Flags setzen. Bearbeitet 21. März 2014 von Enno Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.