如何从一周获得NSDates?只要我知道weekOfMonth

时间:2016-02-02 13:42:35

标签: ios nsdate nsdatecomponents

我需要知道特定一周内出现的Notification。我知道NSDateweekOfMonthmonth

例如,如果我的year为0且weekOfMonth为2且month为2016.我想获取当前周的可用日期(从星期日到星期六) 。但是,由于本周(星期日)的第一天是上个月,我需要在2016年2月1日至2016年2月6日(星期一至星期六)之间获取日期。

year

或者如果我知道当前周的开始日期和结束日期,那也会有所帮助。

1 个答案:

答案 0 :(得分:0)

这是一个略显笨重的方法,基于使用dayOfWeek = 0获取日期,然后前进直到结果日期在同一个月

int monthTarget = 2;
int dayOfWeekTarget = 0;
int yearTarget = 2016;

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

NSDateComponents *comp = [[NSDateComponents alloc] init];
[comp setMonth:monthTarget];
[comp setYear:yearTarget];
[comp setWeekOfMonth:dayOfWeekTarget];

[comp setDay:dayOfWeekTarget];

// see what this gives us
NSDate *firstDate = [calendar dateFromComponents:comp];

NSDateComponents *firstDayComponents = [calendar components:NSCalendarUnitMonth |  NSCalendarUnitDay fromDate:firstDate];

NSInteger day = [firstDayComponents day];
NSInteger month = [firstDayComponents month];

// move forward if we have to
while (month < monthTarget)
{
    dayOfWeekTarget++;
    [comp setDay:dayOfWeekTarget];

    firstDate = [calendar dateFromComponents:comp];

    firstDayComponents = [calendar components:NSCalendarUnitMonth |  NSCalendarUnitDay fromDate:firstDate];

    day = [firstDayComponents day];
    month = [firstDayComponents month];
}

我相信你可以稍微整理一下,但方法就在这里!