Current Week Start and End Date

后端 未结 16 1325
轮回少年
轮回少年 2020-11-30 01:56

I want to get the current week start and end date and I also want to use the previous week start and end date and next week of the start and end date in current month.

相关标签:
16条回答
  • 2020-11-30 02:32

    You can get current day and date by following code:

    NSDate *today = [NSDate date];
        NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
        [dateFormat setDateFormat:@"EEEE"];
        NSString *weekDay = [dateFormat stringFromDate:today];
        [dateFormat setDateFormat:@"dd"];
        NSString *thedate=[dateFormat stringFromDate:today];
        //[dateFormat release];
        NSLog(@"%@ %@", weekDay,thedate);
    

    Now, You need to put some logic in it to calculate starting date and end date of the week. The logic will be such kind,

    if the week day is Monday

    then

    starting date = current date - 0

    end date = current date + 6

    and so on

    I think you can get the idea of it.

    0 讨论(0)
  • 2020-11-30 02:35

    rangeOfUnit:startDate:interval:forDate:. It gives you the start and the interval for a certain time unit. With it it is easy to find the start of the week in the used calendar and add the range-1 to get the latest second in that week.

    NSCalendar *cal = [NSCalendar currentCalendar];
    NSDate *now = [NSDate date];
    NSDate *startOfTheWeek;
    NSDate *endOfWeek;
    NSTimeInterval interval;
    [cal rangeOfUnit:NSWeekCalendarUnit 
           startDate:&startOfTheWeek 
            interval:&interval 
             forDate:now];
    //startOfWeek holds now the first day of the week, according to locale (monday vs. sunday)
    
    endOfWeek = [startOfTheWeek dateByAddingTimeInterval:interval-1];
    // holds 23:59:59 of last day in week.
    
    0 讨论(0)
  • 2020-11-30 02:35

    By take advantage of the method rangeOfUnit:startDate:interval:forDate: of NSDate, there is a simpler way to achieve this:

    - (void)startDate:(NSDate **)start andEndDate:(NSDate **)end ofWeekOn:(NSDate *)date{
        NSDate *startDate = nil;
        NSTimeInterval duration = 0;
        BOOL b = [[NSCalendar currentCalendar] rangeOfUnit:NSWeekCalendarUnit startDate:&startDate interval:&duration forDate:date];
        if(! b){
            *start = nil;
            *end = nil;
            return;
        }
        NSDate *endDate = [startDate dateByAddingTimeInterval:duration-1];
        *start = startDate;
        *end = endDate;
    }
    
    NSDate *this_start = nil, *this_end = nil;
    [self startDate:&this_start andEndDate:&this_end ofWeekOn:[NSDate date]];
    

    So now you have the start date and end date of this week. Then last week:

    NSDate *lastWeekDate = [this_start dateByAddingTimeInterval:-10];
    NSDate *last_start = nil, *last_end = nil;
    [self startDate:&last_start andEndDate:&last_end ofWeekOn:lastWeekDate];
    

    Next week:

    NSDate *nextWeekDate = [this_end dateByAddingTimeInterval:10];
    NSDate *next_start = nil, *next_end = nil;
    [self startDate:&next_start andEndDate:&next_end ofWeekOn:nextWeekDate];
    

    Now you have them all.

    0 讨论(0)
  • 2020-11-30 02:37

    I solve the problem thanks for Support

    Code :- it give the current week start and end date.

     NSDate *today = [NSDate date];
     NSLog(@"Today date is %@",today);
     dateFormat = [[NSDateFormatter alloc] init];
     [dateFormat setDateFormat:@"yyyy-MM-dd"];// you can use your format.
    
     //Week Start Date 
    
     NSCalendar *gregorian = [[NSCalendar alloc]        initWithCalendarIdentifier:NSGregorianCalendar];
    
    NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today];
    
    int dayofweek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:today] weekday];// this will give you current day of week
    
    [components setDay:([components day] - ((dayofweek) - 2))];// for beginning of the week.
    
    NSDate *beginningOfWeek = [gregorian dateFromComponents:components];
    NSDateFormatter *dateFormat_first = [[NSDateFormatter alloc] init];
    [dateFormat_first setDateFormat:@"yyyy-MM-dd"];
    dateString2Prev = [dateFormat stringFromDate:beginningOfWeek];
    
    weekstartPrev = [[dateFormat_first dateFromString:dateString2Prev] retain];
    
    NSLog(@"%@",weekstartPrev);
    
    
    //Week End Date
    
     NSCalendar *gregorianEnd = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    
     NSDateComponents *componentsEnd = [gregorianEnd components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today];
    
     int Enddayofweek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:today] weekday];// this will give you current day of week
    
     [componentsEnd setDay:([componentsEnd day]+(7-Enddayofweek)+1)];// for end day of the week
    
     NSDate *EndOfWeek = [gregorianEnd dateFromComponents:componentsEnd];
     NSDateFormatter *dateFormat_End = [[NSDateFormatter alloc] init];
     [dateFormat_End setDateFormat:@"yyyy-MM-dd"];
     dateEndPrev = [dateFormat stringFromDate:EndOfWeek];
    
     weekEndPrev = [[dateFormat_End dateFromString:dateEndPrev] retain];
      NSLog(@"%@",weekEndPrev);
    
    0 讨论(0)
提交回复
热议问题