How to create a list of weeks by month in object c?

I need to create a list of weeks by months, I tried to follow the codes, but I can not get the correct answer. One of them gives the correct solution for my next output:

NSDate *weekDate = [NSDate date];
NSCalendar *myCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *currentComps = [myCalendar components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekOfMonthCalendarUnit| NSWeekdayCalendarUnit) fromDate:weekDate];
for (int i = 0; i <=10 ;i++)
{
    [currentComps setWeekOfMonth:i];

[currentComps setWeekday:1]; // 1: sunday
NSDate *firstDayOfTheWeek = [myCalendar dateFromComponents:currentComps];
[currentComps setWeekday:7]; // 7: saturday
NSDate *lastDayOfTheWeek = [myCalendar dateFromComponents:currentComps];

NSDateFormatter *myDateFormatter = [[NSDateFormatter alloc] init];
myDateFormatter.dateFormat = @"'week' w dd/MM";
NSString *firstStr = [myDateFormatter stringFromDate:firstDayOfTheWeek];
NSString *secondStr = [myDateFormatter stringFromDate:lastDayOfTheWeek];

NSLog(@"first - %@ \nlast - %@", firstStr, secondStr);
}

I have this conclusion: first week 4 19/01 last week 4 25/01 first week 5 26/01 last week 5 01/02 first week 6 02/02 last week 6 08/02 first week 7 09/02 last week 7 15/02 first week 8 16/02 last week 8 22/02 first week 9 23/02 last - week 9 01/03 first week 10 02/03 last - week 10 08/03 first week 11 09/03 last week 11 15/03 first week 12 16/03 last - week 12 22/03 first week 13 23/03 last - week 13 29/03 first week 14 30/03 last week 14 05/04

, , , . ( 6 02/02 - 6 08/02), .

+3
2

, NSCalendar.

NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
    // Create the start date components
    NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
for(int currentdateindexpath=0;currentdateindexpath<=10;currentdateindexpath++)
{
    [oneDayAgoComponents setWeek:currentdateindexpath];
        NSDate *monthAgo = [calendar dateByAddingComponents:oneDayAgoComponents
                                                     toDate:[NSDate date]
                                                    options:0];
        [formatter setDateFormat:@"'week'W"];
        NSString *stringFromDate = [formatter stringFromDate:monthAgo];

        NSLog(@"seg %d",statusseg.selectedSegmentIndex);
        //NSDate *today = [[NSDate alloc] init];
    //NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

        // Get the weekday component of the current date
       NSDateComponents* subcomponent = [calendar components:NSWeekdayCalendarUnit
                                                           fromDate:[NSDate date]];

        /*
         Create a date components to represent the number of days to subtract from the current date.
         The weekday value for Sunday in the Gregorian calendar is 1, so subtract 1 from the number of days to subtract from the date in question.  (If today is Sunday, subtract 0 days.)
         */
       // NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init];
        [oneDayAgoComponents setDay: 0 - ([subcomponent weekday] - 1)];

        NSDate *beginningOfWeek = [calendar dateByAddingComponents:oneDayAgoComponents
                                                             toDate:[NSDate date] options:0];
        NSLog(@" beginningOfWeek %@",beginningOfWeek);
        [formatter setDateFormat:@"dd/MM/yy"];
        NSString *weekstartdate = [formatter stringFromDate:beginningOfWeek];
        NSLog(@"weekstartdate %@",weekstartdate);
        /*
         Optional step:
         beginningOfWeek now has the same hour, minute, and second as the original date (today).
         To normalize to midnight, extract the year, month, and day components and create a new date from those components.
         */

        NSDateComponents *components =
        [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit |
                               NSDayCalendarUnit) fromDate: beginningOfWeek];
        beginningOfWeek = [calendar dateFromComponents:components];
        NSLog(@"Show %@",beginningOfWeek);
        //+++++++++++++++++++ start week+++++++++++++++
        [oneDayAgoComponents setDay:7- ([subcomponent weekday])];

        NSDate *endOfWeek = [calendar dateByAddingComponents:oneDayAgoComponents
                                                            toDate:[NSDate date] options:0];
        NSLog(@" endOfWeek %@",endOfWeek);
        [formatter setDateFormat:@"dd/MM/yy"];
        NSString *weekendtdate = [formatter stringFromDate:endOfWeek];
        NSLog(@"weekendtdate %@",weekendtdate);
        _topdate_lbl.text=[NSString stringWithFormat:@"%@ %@ to%@ ",stringFromDate,weekstartdate,weekendtdate];
}
+4

All Articles