获得本周的第一天和最后一天

时间:2009-10-26 14:20:19

标签: cocoa cocoa-touch nsdate nscalendar nsdatecomponents

如何获得本周的第一天和最后一天?我需要的是使用NSDate属性过滤一组对象的一些方法,只留下当前一周出现的对象,然后按天过滤它们。我还需要一些方法来获取本地化的日期名称。

我尝试过使用NSCalendar,NSDate和NSDateComponents,但似乎我不能只检查日历的第一个周末,因为上个月/下个月可能有几周的时间。

2 个答案:

答案 0 :(得分:3)

使用NSDateComponents获取工作日,从星期日的1到7。

获得工作日编号后,计算它与您一周的第一天之间的差异。例如,如果你认为星期一(2)是第一天,那么它早了多少天(或者它会是多少天)。如果工作日是4(周三),则差值为2.这意味着如果您从原始日期减去两天,您将获得它所在的第一天。

检查documentation for details,因为您需要处理这些对象还包含时间属性的事实。如果可以,当您只对日期和日期比较感兴趣时,请确保时间值始终为零。

答案 1 :(得分:0)

好的,这就是一个完成工作的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)