2016-07-26 9 views
1

から取得すると、WeekOfMonthを日付から取得する際に少し問題があります。これはサンプルコードです。 iOS:dateOfMonthを日付の問題

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から52または53を返します。 –

0

の差分+ 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);