Get the week number in the iOS SDK

I want to get the week number of the year from the date. I tried the code as below but gave me the wrong week number.

My code for the week number:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"YYYY-MM-dd"]; NSDate *date = [dateFormatter dateFromString:@"2012-09-15"]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSLog(@"week: %i", [[calendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear]); //Display 38 instead of 37 } 

Note. . If I try using [NSDate date] display the correct one.

Help me solve this. Thanks,

+6
source share
4 answers

ObjectiveC:

  NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *dateComponent = [calendar components:(NSWeekOfYearCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]]; NSLog(@"%@",dateComponent); 

Update

  NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *dateComponent = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:date]; NSLog(@"%@",dateComponent); 

Swift:

 let calendar = NSCalendar.currentCalendar() let dateComponent = calendar.components([.WeekOfYear, .Day, .Month, .Year], fromDate: NSDate(timeIntervalSinceNow: 0)) print("weekOfYear \(dateComponent.weekOfYear)") 

Swift 3:

 let component = Calendar.current.component(.weekOfYear, from: Date()) print("Week of Year \(component)") 
+18
source

[NSCalendar currentCalendar] gives the default Gregorian Calendar. you can use

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

to get an ISO 08601 compliance calendar that has a week number of 37 for your date.

+11
source

Swift 3: You need to know the last Date selected month. Then check the number of weeks this week, and this will be your number of weeks per month.

 return Calendar.current.component(.weekOfMonth, from: lastDate ?? Date()) 
0
source

Updated code in ObjectiveC uses version Xcode - 9.1 -:

  NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *dateComponent = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:[NSDate date]]; NSLog(@"%ld",(long)[dateComponent weekOfYear]); 
0
source

Source: https://habr.com/ru/post/949191/


All Articles