简体   繁体   English

iOS:获取本周的所有日期

[英]iOS: Get all dates in current week

I am trying to get all dates in the current week of a given date: 我想在给定日期的当前周内获取所有日期:

In the example below, the input is 在下面的示例中,输入是

2015-11-29 23:40:37 +0000 2015-11-29 23:40:37 +0000

, so I would expect the output to be an array of dates from November 23 - November 29, but the actual output is November 30 - December 6. ,所以我希望输出是11月23日到11月29日的日期数组,但实际输出是11月30日 - 12月6日。

-(NSArray *)datesForWeekOf : (NSDate *) date {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *startOfWeek;
    NSDate *endOfWeek;
    NSTimeInterval interval;

    [calendar rangeOfUnit:NSCalendarUnitWeekOfMonth startDate:&startOfWeek interval:&interval forDate:date];
    endOfWeek = [startOfWeek dateByAddingTimeInterval:interval-1];

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

    NSDateComponents *days = [[NSDateComponents alloc] init];
    NSInteger dayCount = 0;
    NSMutableArray *allDates = [NSMutableArray array];

    while ( TRUE ) {
        [days setDay: ++dayCount];
        NSDate *date = [gregorianCalendar dateByAddingComponents: days toDate: startOfWeek options: 0];
        [allDates addObject:date];
        if ( [date compare: endOfWeek] == NSOrderedDescending )
            break;

    }
    return allDates;

}

You can get all dates of this week and next week using following code:- 您可以使用以下代码获取本周和下周的所有日期: -

NSArray * allDatesOfThisWeek = [self daysThisWeek];
NSArray * allDatesOfNextWeek = [self daysNextWeek];

Following methods are used for calculating dates of this week:- 以下方法用于计算本周的日期: -

-(NSArray*)daysThisWeek
{
     return  [self daysInWeek:0 fromDate:[NSDate date]];
}

-(NSArray*)daysNextWeek
{
    return  [self daysInWeek:1 fromDate:[NSDate date]];
}
-(NSArray*)daysInWeek:(int)weekOffset fromDate:(NSDate*)date
{
    NSCalendar *calendar = [NSCalendar currentCalendar];

    //ask for current week
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    comps=[calendar components:NSWeekCalendarUnit|NSYearCalendarUnit fromDate:date];
    //create date on week start
    NSDate* weekstart=[calendar dateFromComponents:comps];

    NSDateComponents* moveWeeks=[[NSDateComponents alloc] init];
    moveWeeks.weekOfYear=weekOffset;            
    weekstart=[calendar dateByAddingComponents:moveWeeks toDate:weekstart options:0];


    //add 7 days
    NSMutableArray* week=[NSMutableArray arrayWithCapacity:7];
    for (int i=1; i<=7; i++) {
        NSDateComponents *compsToAdd = [[NSDateComponents alloc] init];
        compsToAdd.day=i;
        NSDate *nextDate = [calendar dateByAddingComponents:compsToAdd toDate:weekstart options:0];
        [week addObject:nextDate];

    }
    return [NSArray arrayWithArray:week];
}

If you want to get dates of next to next week from today, then pass weekOffset=2 like this:- 如果你想从今天开始下周的日期,那么就像这样传递weekOffset = 2: -

NSArray * allDatesOfNextToNextWeek = [self daysInWeek:2 fromDate:now];

If you want to get dates of previous week from today, then pass weekOffset=-1 like this:- 如果你想从今天开始上周的日期,那么通过weekOffset = -1,如下所示: -

NSArray * allDatesOfPreviousWeek = [self daysInWeek:-1 fromDate:now];

Hope, this is what you're looking for. 希望,这是你正在寻找的。 Any concern get back to me. 任何关注都会回复给我。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM