Erster ersten und letzten Tag der aktuellen Woche
-
06-07-2019 - |
Frage
Wie kann ich erster und letzter Tag der aktuellen Woche? Was ich brauche, ist eine Möglichkeit, eine Reihe von Objekten mit NSDate Eigenschaft der Filterung nur diejenigen zu verlassen, die auf aktuelle Woche erscheinen, und sie dann nach Tagen filtern. Auch brauche ich einen Weg lokalisierte Tagesnamen zu erhalten.
Ich habe versucht, mit NSCalendar, NSDate und NSDateComponents zu spielen, aber es scheint, dass ich nicht nur firstWeekday Kalender überprüfen, da es Wochen mit Tagen vom vorherigen / nächsten Monat sein könnte.
Lösung 2
Ok, hier geht es, einen Python-Schnipsel, die die Arbeit erledigt
def daySec(diff):
return 60*60*24*diff
def weekDays(dt=None):
if not dt:
dt = NSDate.date() # use today
cal = NSCalendar.currentCalendar()
dc = cal.components_fromDate_(NSWeekdayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit, dt)
normDt = cal.dateFromComponents_(dc) # get the day-rounded date
shift = dc.weekday() - cal.firstWeekday()
firstDt = normDt.dateByAddingTimeInterval_(daySec(-shift))
lastDt = normDt.dateByAddingTimeInterval_(daySec(-shift+7)) # up to next week's first day midnight
return (firstDt, lastDt)
Andere Tipps
Verwenden NSDateComponents den Wochentag zu erhalten, die von 1 für Sonntag bis 7 ist.
Wenn Sie die Wochentag-Nummer haben, berechnen Sie den Unterschied zwischen ihm und dem ersten Tag der Woche. Zum Beispiel, wenn Sie Montag (2) betrachten der erste Tag sein, dann, wie früher viele Tage waren es (oder wäre es). Wenn der Wochentag 4 (Mi), dann ist der Unterschied 2. Das bedeutet, dass, wenn Sie zwei Tage nach dem ursprünglichen Datum subtrahieren, werden Sie den ersten Tag der Woche bekommen, dass es liegt in.
Überprüfen Sie die Dokumentation zu , weil man mit der Tatsache umgehen müssen, dass diese Aufgabe auch Zeit Attribute enthalten. Wenn Sie können, stellen Sie sicher, dass die Zeitwerte sind immer Null, wenn Sie nur daran interessiert, Termine und aktuelle Vergleiche sind.