Reputation: 191
there is a little issue about getting WeekOfMonth
from date. This is a sample code.
NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
[dateformate setDateFormat:@"dd/MM/yyyy"]; // Date formater
NSDate *dateTest1 = [dateformate dateFromString:@"25/07/2016"]; //Week no: 5
NSDate *dateTest2 = [dateformate dateFromString:@"01/08/2016"]; //Week no: 1
NSDate *dateTest3 = [dateformate dateFromString:@"08/08/2016"]; //Week no: 2
NSDate *dateTest4 = [dateformate dateFromString:@"15/08/2016"]; //Week no: 3
NSDate *dateTest5 = [dateformate dateFromString:@"22/08/2016"]; //Week no: 4
NSDate *dateTest6 = [dateformate dateFromString:@"29/08/2016"]; //Week no: 5
NSDate *dateTest7 = [dateformate dateFromString:@"05/09/2016"]; //Week no: 6
components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest1];
dateString = [dateformate stringFromDate:dateTest1];
NSLog(@"dateTest1 -> %@",dateString); //output : dateTest1 -> 25/07/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 4
components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest2];
dateString = [dateformate stringFromDate:dateTest2];
NSLog(@"dateTest2 -> %@",dateString); //output : dateTest2 -> 01/08/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 1
components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest3];
dateString = [dateformate stringFromDate:dateTest3];
NSLog(@"dateTest3 -> %@",dateString); //output : dateTest3 -> 08/08/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 2
components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest4];
dateString = [dateformate stringFromDate:dateTest4];
NSLog(@"dateTest4 -> %@",dateString); //output : dateTest4 -> 15/08/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 3
components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest5];
dateString = [dateformate stringFromDate:dateTest5];
NSLog(@"dateTest5 -> %@",dateString); //output : dateTest5 -> 22/08/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 4
components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest6];
dateString = [dateformate stringFromDate:dateTest6];
NSLog(@"dateTest6 -> %@",dateString); //output : dateTest6 -> 29/08/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 5
components = [calendar components:NSCalendarUnitWeekOfMonth fromDate:dateTest7];
dateString = [dateformate stringFromDate:dateTest7];
NSLog(@"dateTest7 -> %@",dateString); //output : dateTest7 -> 05/09/2016
NSLog(@"Week no: %ld",(long)[components weekOfMonth]); //output : Week no: 2
As you can see dateTest1
should be Week no = 5
and NOT Week no = 4
. For the other dates there is no problems as I see and as you can see.
I need the correct WeekOfMonth
to set my FFCalendar
properly
https://github.com/fggeraissate/FFCalendar
Upvotes: 1
Views: 451
Reputation: 191
Following the solution proposed raj-aggrawal I made this solution that is working good
NSDate *date = [[FFDateManager sharedManager] currentDate];
NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
[dateformate setDateFormat:@"dd/MM/yyyy"]; // Date formater
NSString *dateString = [dateformate stringFromDate:date];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* dateComponent = [calendar components:NSWeekOfYearCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:date];
NSInteger weekOfYearCurrent =(long)[dateComponent weekOfYear];
dateString = [dateformate stringFromDate:date];
NSLog(@"dateCurrent -> %@",dateString);
NSLog(@"weekOfYearCurrent: %ld",(long)weekOfYearCurrent);
NSDate *dateFirstMonth = [dateformate dateFromString:[NSString stringWithFormat:@"01/%d/2016", (int)[dateComponent month]]];
dateComponent = [calendar components:NSWeekOfYearCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:dateFirstMonth];
NSInteger weekOfYearFirstDayOfMonth =(long)[dateComponent weekOfYear];
dateString = [dateformate stringFromDate:dateFirstMonth];
NSLog(@"dateFirstMonth -> %@",dateString);
NSLog(@"weekOfYearFirstDayOfMonth: %ld",(long)weekOfYearFirstDayOfMonth);
NSInteger NumberWeekOfMonth = (weekOfYearCurrent - weekOfYearFirstDayOfMonth) + 1;
NSLog(@"NumberWeekOfMonth: %ld",(long)NumberWeekOfMonth);
Upvotes: 0
Reputation: 761
let calendar = NSCalendar.currentCalendar()
let dateComponent = calendar.components([.WeekOfYear, .Day, .Month, .Year], fromDate: NSDate(timeIntervalSinceNow: 0))
print("weekOfYear \(dateComponent.weekOfYear)")
Using above code you can get the weekOfYear. Now you need to calculate weekOfYear of the first date of that month and the date you need to find. now for getting the weekOfMonth get the diff + 1 of both WeekOfYear
Upvotes: 2