Ermittlung der Tage der aktuellen Kalenderwoche

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2021 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Ermittlung der Tage der aktuellen Kalenderwoche

    Ich brauchte für ein Projekt die Tage der aktuellen Kalenderwoche und mache das so

    Quellcode

    1. // Ermittlung Wochentagszähler aus aktuellem Datum
    2. NSInteger wochentagszaehler = [[NSCalendar currentCalendar] component:NSCalendarUnitWeekday fromDate:[NSDate date]];
    3. // Korrekturzähler für Ermittlung Montag
    4. NSInteger korrektur = 0;
    5. switch (wochentagszaehler) {
    6. case 1: // Sonnatg
    7. korrektur = -6;
    8. break;
    9. case 2: // Montag
    10. korrektur = 0;
    11. break;
    12. case 3: // Dienstag
    13. korrektur = -1;
    14. break;
    15. case 4: // Mittwoch
    16. korrektur = -2;
    17. break;
    18. case 5: // Donnerstag
    19. korrektur = -3;
    20. break;
    21. case 6: // Freitag
    22. korrektur = -4;
    23. break;
    24. case 7: // Samstag
    25. korrektur = -5;
    26. break;
    27. }
    28. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    29. [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    30. // Ermittlung Wochenbeginn zu aktuellem Datum
    31. NSDate *wochenbeginn = [[NSDate date] dateByAddingTimeInterval:60*60*24*korrektur];
    32. // Ermittlung der Wochentage aus dem aktuellem Datum
    33. for (int a=0; a<7; a++) {
    34. NSDate *aktuellerTag = [wochenbeginn dateByAddingTimeInterval:60*60*24*a];
    35. NSLog(@"%@", [dateFormatter stringFromDate:aktuellerTag]);
    36. }
    Alles anzeigen
    es funktioniert für meine Zwecke, wollte mal hören es eine einfachere Methode gibt?
  • Es geht auch einfacher:

    Quellcode

    1. NSCalendar *calendar = [NSCalendar currentCalendar];
    2. NSDate *someDate = [NSDate date];
    3. NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    4. dateComponents.weekOfYear = [calendar component:NSCalendarUnitWeekOfYear fromDate:someDate];
    5. dateComponents.year = [calendar component:NSCalendarUnitYear fromDate:someDate];
    6. dateComponents.weekday = 2; // Monday
    7. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    8. [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    9. // Ermittlung Wochenbeginn zu aktuellem Datum
    10. NSDate *startOfWeek = [calendar dateFromComponents:dateComponents];
    11. // Ermittlung der Wochentage aus dem aktuellem Datum
    12. for (int a = 0; a < 7; a++) {
    13. NSDate *day = [startOfWeek dateByAddingTimeInterval:86400 * a];
    14. NSLog(@"%@", [dateFormatter stringFromDate:day]);
    15. }
    Alles anzeigen
  • Meine Version

    Quellcode

    1. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    2. [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    3. NSDate *datum = [dateFormatter dateFromString: @"2021-02-14"];
    4. NSDateComponents *comps = [[NSDateComponents alloc] init];
    5. comps.weekday = 2;
    6. NSDate *start = [[NSCalendar currentCalendar] nextDateAfterDate: datum matchingComponents: comps options: NSCalendarMatchPreviousTimePreservingSmallerUnits | NSCalendarSearchBackwards];
    7. for (int i = 0; i < 7; i++) {
    8. NSDate *wochentag = [[NSCalendar currentCalendar] dateByAddingUnit: NSCalendarUnitDay value: i toDate: start options: 0];
    9. NSLog(@"%@", [dateFormatter stringFromDate: wochentag]);
    10. }
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • Woanders ist der Wochenbeginn auch mal der Samstag...

    daneben gibt es gefühlte 100 Varianten, was denn die erste Woche des Jahres ist.

    Das gilt allerdings nur, wenn man sich darauf verständigt, dass die Woche 7 Tage hat. Auch da gibt es x verschiedene Varianten. Teilweise zählt man auch von Montag bis Sonntag und die Woche hat nur 6 Tage, da der Sonntag nicht als Tag gilt, sondern als Gottes Geschenk...

    Von daher stellt sich zuerst die Frage was ist für deine Kunden eine Kalenderwoche und dann, was ist für dich eine?

    Schöne Grüsse
    Wolf
  • Wolf schrieb:

    Von daher stellt sich zuerst die Frage was ist für deine Kunden eine Kalenderwoche und dann, was ist für dich eine?
    Das stimmt so nicht. Unter macOS kann man unter "System Preferences" -> "Language & Region" -> "General" -> "First day of week" einstellen. Wieso sollte man das nicht berücksichtigen, wenn das System das unterstützt?

    Wolf schrieb:

    Das gilt allerdings nur, wenn man sich darauf verständigt, dass die Woche 7 Tage hat. Auch da gibt es x verschiedene Varianten. Teilweise zählt man auch von Montag bis Sonntag und die Woche hat nur 6 Tage, da der Sonntag nicht als Tag gilt, sondern als Gottes Geschenk...
    Dass eine Woche sieben Tage hat, ist mehr als gebräuchlich. Welche Tage man einer Woche wie zählt, benennt usw., ist ganz etwas anderes, als, wann die Woche beginnt.
    Kann mir vorstellen, dass man z.B. statt "am siebten Tag bla bla bla..." "am Ruhetag bla bla bla..." sagt. Weil das so gebräuchlich ist.
  • Grundsätzlich sind Datum & Uhrzeit leider viel komplizierter, als man auf den ersten Blick denken mag. In der Praxis gibt es zwar meist keine Probleme, wenn man etwas schlampig arbeitet - aber wenn es dann in die Binsen geht, kann das gerne auch mal richtig übel werden… (allein schon die ganze Jahr 2000-Geschichte).
    Aus Prinzip würde ich die Finger von allen "simplen" Umrechnungen lassen ("heute plus 24 * 60 * 60 ist morgen"):
    Es gibt nicht nur Schaltjahre, sondern auch kleinere Korrekturen zwischendurch — und die Sommerzeit könnte selbst bei diesem einfachen Beispiel dazwischen funken.

    NSDateComponents sind leider (wie eigentlich alle Lösungen in dem Bereich) etwas unhandlich, aber das liegt wohl in der Natur der Sache. Ansonsten könnte github.com/davedelong/time einen Blick wert sein.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von t-no ()