2016-07-26 9 views
1

에서 weekOfMonth이 (가) WeekOfMonth을 얻는 데 약간 문제가 있습니다. 이것은 샘플 코드입니다. iOS : 날짜 문제

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 

당신이 dateTest1을 볼 수 있듯이

Week no = 5 및 NOT Week no = 4해야한다. 다른 날짜들에 대해서는 내가 보았을 때 그리고 당신이 볼 수있는 한 아무런 문제가 없습니다.

나는 당신이 weekOfYear를 얻을 수 위의 코드를 사용하여 내 FFCalendar 제대로 https://github.com/fggeraissate/FFCalendar

답변

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

을 설정하는 올바른 WeekOfMonth이 필요합니다. 이제 그 달의 첫 번째 날짜와 찾을 필요가있는 날짜의 weekOfYear를 계산해야합니다. 지금 weekOfMonth 제안 솔루션에 이어 두 WeekOfYear

+0

감사 작업이 액을했다. weekOfMonth를 사용하는 것은 나에 달려 있지 않으며 FFCalendar에서 다릅니다. FFWeekCalendarView 메서드에서 dateChanged, WeekOfMonth 함께 작동하기 때문에 내가 올바르게 WeekOfMonth 설정해야합니다. 나는 FFCalendar에서 weekOfMonth 대신 weekOfYear를 사용할 수 있다고 생각하지 않습니다. – Bruno

+0

죄송하지만 이해합니다! 그것은 아주 잘 작동합니다. 감사합니다 – Bruno

+0

주 1 ~ 4 회 또는 5 회 및 주 1 ~ 52 또는 53을 반환해야합니다. –

0

의 DIFF + 1을 얻을 얻기위한 주권-aggrawal 내가 대답 좋은

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);