Начало первого и последнего дня текущей недели

Как я могу получить первые и последние дни текущей недели? Мне нужен какой-то способ фильтрации набора объектов со свойством 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. Это означает, что если вы вычтете два дня из первоначальной даты, вы получите первый день недели, в котором она находится.

Подробности смотрите в документации, потому что вам нужно учитывать тот факт, что эти объекты также содержат атрибуты времени. Если вы можете, убедитесь, что значения времени всегда равны нулю, когда вас интересуют только даты и сравнения дат.

Другие вопросы по тегам