2013-07-11 6 views
6

Desidero ottenere il numero della settimana dell'anno dalla data. Ho provato il codice come segue ma mi dà un numero di settimana errato.Ottieni il numero della settimana nell'SDK iOS

Il mio codice per il numero della settimana:

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 
} 

Nota: se provo con con [NSDate date] visualizzazione della corretta.

aiutarmi a risolvere questo .. Grazie,

+0

Vedere la mia risposta http: // stackoverflow.com/questions/17403761/get-the-day-from-the-date-in-ios-sdk/17403855#17403855 –

+2

Esistono diverse definizioni per il numero della settimana di una data. Penso che sia la causa più probabile del tuo problema. Vedi http://en.wikipedia.org/wiki/Calendar_week#Week_numbering per i dettagli. – Treb

+0

@ SAMIRRATHOD, Grazie per la risposta ... mostra solo il giorno della settimana non per il numero della settimana. – user2526811

risposta

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

Grazie per la risposta .. Ma quando provo a dare la data da String come visto sopra, restituisce il numero della settimana sbagliata. – user2526811

+0

uso per NSDateComponents –

+0

** Grazie mille per la tua risposta !!!!! ** – user2526811

11

[NSCalendar currentCalendar] gi ti mostra un calendario gregoriano come predefinito. È possibile utilizzare

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

per ottenere un ISO 08.601 conformi calendario, che ha la settimana numero 37 per la vostra data.

+0

scusa ma per il '2012-09-25', restituisce _38 anziché 39_. ** Che cosa sta andando ora? ** – user2526811

+0

prova a impostare il primo giorno della settimana del calendario sul valore corretto (non so quale ..) con - (void) setFirstWeekday: (NSUInteger) giorno della settimana – AlexVogel

+0

Ho la soluzione . – user2526811

0

Swift 3: È necessario conoscere l'ultimo Date del mese selezionato. Che numero di assegno di settimana per questa settimana, e questo sarà il vostro numero di settimane in mesi

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

codice aggiornato in ObjectiveC usato versione Xcode - 9.1 -:

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