Начало первого и последнего дня текущей недели - PullRequest
2 голосов
/ 26 октября 2009

Как я могу получить первые и последние дни текущей недели? Мне нужен какой-то способ фильтрации набора объектов со свойством NSDate, чтобы оставить только те, которые появляются на текущей неделе, а затем отфильтровать их по дням. Также мне нужен какой-то способ получить локализованные названия дней.

Я пытался поиграть с NSCalendar, NSDate и NSDateComponents, но, похоже, я не могу просто проверить первый выходной день календаря, поскольку могут быть недели с днями из предыдущего / следующего месяца.

Ответы [ 2 ]

3 голосов
/ 26 октября 2009

Используйте NSDateComponents для получения дня недели, который составляет от 1 для воскресенья до 7.

Получив номер дня недели, вычислите разницу между ним и вашим первым днем ​​недели. Например, если вы считаете понедельник (2) первым днем, то на сколько дней это было (или будет). Если день недели равен 4 (ср.), Тогда разница равна 2. Это означает, что если вы вычтете два дня из первоначальной даты, вы получите первый день недели, в котором она находится.

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

0 голосов
/ 26 октября 2009

Хорошо, здесь идет фрагмент кода 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)
...