2016-07-26 18 views
1

gibt es ein kleines Problem über WeekOfMonth von Datum bekommen. Dies ist ein Beispielcode.iOS: bekommen weekOfMonth von Datum Ausgabe

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 

Wie Sie dateTest1 sehen sollte Week no = 5 und NICHT Week no = 4 sein. Für die anderen Daten gibt es keine Probleme, wie ich sehe und wie Sie sehen können.

Ich brauche die richtige WeekOfMonth meine FFCalendar richtig https://github.com/fggeraissate/FFCalendar

Antwort

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

oben Code einstellen Verwenden Sie die WEEKOFYEAR erhalten können. Jetzt müssen Sie weekOfYear des ersten Datums des Monats und das Datum, das Sie finden müssen, berechnen. jetzt immer die weekOfMonth die diff + 1 sowohl WeekOfYear

+0

Danke für die Antwort funktioniert. WeekOfMonth hängt nicht von mir ab, es hängt von FFCalendar ab. In FFWeekCalendarView für method dateChanged muss ich WeekOfMonth richtig einstellen, da es mit WeekOfMonth funktioniert. Ich glaube nicht, dass ich weekOfYear anstelle von weekOfMonth in FFCalendar verwenden kann. – Bruno

+0

Entschuldigung jetzt verstehe ich! Es funktioniert sehr gut. Danke – Bruno

+0

Woche der Monatsrückkehr 1-4 oder 5. und Woche des Jahres sollte 1-52 oder 53 zurückgeben –

0

erhalten die Lösung Nach vorgeschlagen raj-Aggrawal ich diese Lösung hergestellt, die gute

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