2015-11-17 2 views
1

alors je fais un sélecteur de semaine de base, où vous pouvez choisir un numéro de semaine et une année, et obtenir la date correspondante à partir du point de départ des semaines.NSDateComponents weekOfYear renvoie la mauvaise date

Un scénario de test de base

let calendar = NSCalendar.currentCalendar() 
let components = NSDateComponents() 
components.year = 2015 
components.weekOfYear = 15 
print(calendar.dateFromComponents(components)!) 

Vous pouvez voir, que je mets l'année 2015 a voulu et la semaine a voulu 15, mais le résultat est que je reçois: « 2014-12-31 23:00 : 00 +0000 "

... et c'est vraiment ça me bloque. Peu importe la semaine et l'année que je choisis, il sera toujours fermé et en décembre.

Merci d'avance pour votre aide.

Répondre

4

weekOfYear travaille en collaboration avec yearForWeekOfYear:

let calendar = NSCalendar.currentCalendar() 
let components = NSDateComponents() 

components.yearForWeekOfYear = 2015 
components.weekOfYear = 15 

print(calendar.dateFromComponents(components)!) 
// 2015-04-05 22:00:00 +0000 

Mise à jour pour Swift 3 et plus tard:

let calendar = Calendar.current 
var components = DateComponents() 

components.yearForWeekOfYear = 2015 
components.weekOfYear = 15 

print(calendar.date(from: components)!) 
+1

petite note intéressante, le réglage de la semaine à 1 donne également le résultat, juste pensé qu'il était intéressant et devrait être mentionné – Knight0fDragon

+0

@ Knight0fDragon: Intéressant, cela semble fonctionner aussi bien. Mais mieux vaut mettre 'components.weekday = calendar.firstWeekday', car le dimanche n'est pas le premier jour de la semaine partout. –