2013-07-11 11 views
6

Chcę uzyskać numer tygodnia w danym roku od daty. Próbowałem kodu w następujący sposób, ale podałem zły numer tygodnia.Uzyskaj numer tygodnia w pakiecie SDK iOS

Mój kod na numer tygodnia:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"YYYY-MM-dd"]; 
    NSDate *date = [dateFormatter dateFromString:@"2012-09-15"]; 


    NSCalendar *calendar = [NSCalendar currentCalendar]; 

    NSLog(@"week: %i", [[calendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear]); //Display 38 instead of 37 
} 

Uwaga: jeśli staram zz [NSDate date] poprawne wyświetlanie.

mi pomóc rozwiązać ten .. Dziękuję

+0

zobaczyć moją odpowiedź http: // stackoverflow.com/questions/17403761/get-the-day-od-date-in-ios-sdk/17403855#17403855 –

+2

Istnieją różne definicje dla numeru tygodnia daty. Myślę, że to najbardziej prawdopodobna przyczyna twojego problemu. Więcej informacji można znaleźć na stronie http://en.wikipedia.org/wiki/Calendar_week#Week_numbering. – Treb

+0

@ SAMIRRATHOD, Dzięki za odpowiedź ... pokazuje tylko dzień tygodnia, a nie numer tygodnia. – user2526811

Odpowiedz

17

ObjectiveC:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *dateComponent = [calendar components:(NSWeekOfYearCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]]; 
NSLog(@"%@",dateComponent); 

Swift:

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

Swift 3:

let component = Calendar.current.component(.weekOfYear, from: Date()) 
print("Week of Year \(component)") 
+0

Dzięki za odpowiedź .. Ale kiedy próbuję podać datę z łańcucha, jak widać powyżej, zwraca zły numer tygodnia. – user2526811

+0

używać do NSDateComponents –

+0

** Bardzo dziękuję za odpowiedź !!!!! ** – user2526811

11

[NSCalendar currentCalendar] gi domyślnie jest to kalendarz gregoriański. Można użyć

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSISO8601Calendar]; 

uzyskać ISO 08601 zgodności, kalendarza, który ma tygodniową liczbę do tej pory.

+0

przepraszam, ale dla '2012-09-25' zwraca _38 zamiast 39_. ** Co się teraz dzieje? ** – user2526811

+0

spróbuj ustawić pierwszy dzień tygodnia kalendarza na prawidłową wartość (nie wiem, który ..) z - (void) setFirstWeekday: (NSUInteger) weekday – AlexVogel

+0

Mam rozwiązanie . – user2526811

0

Swift 3: Potrzebujesz znać ostatni numer Date wybranego miesiąca. Niż liczby kontrolnej tygodnia w tym tygodniu, i to będzie Twój liczbę tygodni w miesiącu

return Calendar.current.component(.weekOfMonth, from: lastDate ?? Date()) 
0

Zaktualizowany kod w ObjectiveC używany Xcode wersji - 9.1 -:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDateComponents *dateComponent = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:[NSDate date]]; 
    NSLog(@"%ld",(long)[dateComponent weekOfYear]); 
Powiązane problemy