Начало первого и последнего дня текущей недели
Как я могу получить первые и последние дни текущей недели? Мне нужен какой-то способ фильтрации набора объектов со свойством NSDate, чтобы оставить только те, которые появляются на текущей неделе, а затем отфильтровать их по дням. Также мне нужен какой-то способ получить локализованные названия дней.
Я пытался поиграть с NSCalendar, NSDate и NSDateComponents, но кажется, что я не могу просто проверить firstWeekday календаря, так как могут быть недели с днями из предыдущего / следующего месяца.
2 ответа
Хорошо, вот оно, фрагмент Python, который делает работу
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)
Используйте NSDateComponents для получения дня недели, который составляет от 1 для воскресенья до 7.
Получив номер дня недели, вычислите разницу между ним и вашим первым днем недели. Например, если вы считаете понедельник (2) первым днем, то сколько это было дней (или будет). Если день недели равен 4 (ср.), Тогда разница равна 2. Это означает, что если вы вычтете два дня из первоначальной даты, вы получите первый день недели, в котором она находится.
Подробности смотрите в документации, потому что вам нужно учитывать тот факт, что эти объекты также содержат атрибуты времени. Если вы можете, убедитесь, что значения времени всегда равны нулю, когда вас интересуют только даты и сравнения дат.