2016-07-26 6 views
1

есть небольшая проблема о получении WeekOfMonth с даты. Это пример кода.iOS: получение weekOfMonth с даты выпуска

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 и НЕ Week no = 4. Для других дат нет проблем, как я вижу и, как вы можете видеть.

мне нужно правильно WeekOfMonth установить мой 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)") 

Используя выше код, который вы можете получить weekOfYear. Теперь вам нужно рассчитать weekOfYear с первой даты этого месяца и даты, которую вам нужно найти. теперь получение weekOfMonth получить Diff + 1 из обоих WeekOfYear

+0

Спасибо за ответ. Использование weekOfMonth не зависит от меня, это зависит от FFCalendar. В FFWeekCalendarView по методу dateChanged, где мне нужно правильно установить WeekOfMonth, потому что он работает с WeekOfMonth. Я не думаю, что могу использовать weekOfYear вместо weekOfMonth в FFCalendar. – Bruno

+0

Извините, теперь я понимаю! Он работает очень хорошо. Спасибо – Bruno

+0

Неделя месяца возврата 1-4 или 5 и неделя года должны возвращать 1-52 или 53 –

0

После предлагаемого решения Радж-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);