在IOS SDK中获取周日期

时间:2013-06-28 06:54:54

标签: ios calendar nscalendar

我想得到当前和下周的日期与日期名称。

即。如果今天的日期是28-06-2013(星期五),那么我希望将2013年6月23日(星期日)至2013年6月29日(星期六)的日期作为本周。

下周

我希望从2013年6月30日(周日)到2013年7月6日(周六)获得约会。

我该怎么做?

谢谢,

5 个答案:

答案 0 :(得分:12)

以下是执行此操作的示例代码。

-(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];
    if (weekOffset>0) {
        NSDateComponents* moveWeeks=[[NSDateComponents alloc] init];
        moveWeeks.week=1;
        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];
}

答案 1 :(得分:1)

我打算复制并粘贴答案,但我建议去阅读这篇文章:Current Week Start and End Date。看起来它会帮助你达到你想要的效果。

或许这样的事情:

NSDate *now = [NSDate date];

NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger weekNumber =  [[calendar components: NSWeekCalendarUnit fromDate:now] week];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *comp = [gregorian components:NSYearCalendarUnit fromDate:now];
[comp setWeek:weekNumber];  //Week number.

int i;

for (i = 1; i < 8; i=i+1){

    [comp setWeekday:i]; //First day of the week. Change it to 7 to get the last date of the week

    NSDate *resultDate = [gregorian dateFromComponents:comp];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"EEEE MMMM d, yyyy"];

    NSString *myDateString = [formatter stringFromDate:resultDate];
    NSLog(@"%@",myDateString);

}

答案 2 :(得分:0)

使用NSDateComponents找出一周中的某一天,然后找到它之前和之后所需的日期。

答案 3 :(得分:0)

嗯,我不是这方面的专家,但是这样做的一个愚蠢的方法是首先能够从NSDate识别出一周中的某一天。然后,您可以添加if语句,然后if语句可以添加和减去日期以及每个日期nslogprintf。或者我认为有一种方法可以访问ios日历。

好的,所以上面几乎说了,并且比我说的更多。是的,请在我之前检查帖子上的链接。

答案 4 :(得分:0)

使用NSCalendar实例将您的启动NSDate实例转换为NSDateComponents实例,将1天添加到NSDateComponents并使用NSCalendar将其转换回NSDate实例。重复最后两个步骤,直至到达结束日期。

NSDate *currentDate = [NSDate date];
 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
 NSDateComponents *comps = [[NSDateComponents alloc] init];
 [comps setDay:1];
 NSDate *nextDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];

或者找到开始日期和结束日期。喜欢

NSDate *startDate = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:7];
 NSDate *endDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];

然后, NSDate nextDate;

for ( nextDate = startDate ; [nextDate compare:endDate] < 0 ; nextDate = [nextDate addTimeInterval:24*60*60] ) {
  // use date
}