2017-09-25 2 views
0

Comment obtenir le début et la fin de la semaine dans swift? ceci est mon codeComment obtenir le début et la fin de la semaine dans swift?

extension Date { 
    var startOfWeek: Date? { 
     let gregorian = Calendar(identifier: .gregorian) 
     guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil } 
     return gregorian.date(byAdding: .day, value: 1, to: sunday) 
    } 

    var endOfWeek: Date? { 
     let gregorian = Calendar(identifier: .gregorian) 
     guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil } 
     return gregorian.date(byAdding: .day, value: 7, to: sunday) 
    } 
} 

J'appelle comme ça

let startWeek = Date().startOfWeek 
let endWeek = Date().endOfWeek 
print(startWeek!) 
print(endWeek!) 
var dateFormat1 = DateFormatter() 
dateFormat1.dateFormat = "dd-MM-yy" 
let startWeek2 = dateFormat1.string(from: startWeek!) 
var dateFormat12 = DateFormatter() 
dateFormat12.dateFormat = "dd-MM-yy" 
let endWeek2 = dateFormat12.string(from: endWeek!) 
print(startWeek2) 
print(endWeek2) 

et sortie

2017-09-24 18:30:00 +0000 
2017-09-30 18:30:00 +0000 
25-09-17 
01-10-17 
+0

Qu'est-ce qui ne va pas? S'il vous plaît inclure une description du comportement attendu et le comportement réel aussi, ne montrez pas simplement votre sortie actuelle ... –

+0

voir dans ma sortie, après l'ajout des dates date de mise en forme obtenir increse du 24-09-2017 au 25-09- 2017 – Ram

+0

https://stackoverflow.com/a/38260078/2303865 –

Répondre

0

Votre code fonctionne parfaitement bien. Si vous souhaitez exécuter votre code dans un Playground, vous pouvez voir les objets réels Date plutôt que des représentations de chaînes. Même si vous ne spécifiez pas DateFormatter, sous le capot, lorsque vous faites print(Date()), Swift utilise un DateFormatter pour imprimer des objets Date et par conséquent cette valeur sera un temps relatif au lieu du temps absolu fourni par l'objet Date.

Dans un terrain de jeu vous pouvez voir que la startOfWeek réelle est "Sep 25, 2017 at 12:00 AM", tandis que le endOfWeek est "Oct 1, 2017 at 12:00 AM", qui sont les valeurs correctes pour la semaine en cours.

N'utilisez pas print(Date()) pour vérifier l'exactitude des objets Date car, comme vous pouvez le voir, cela donnera des résultats inattendus en raison des sous-jacents DateFormatter utilisés.

+0

merci son travail bien – Ram

0

Voici Swift 3 Version: -

extension Date { 
    var startOfWeek: Date? { 
     let gregorian = Calendar(identifier: .gregorian) 
     guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil } 
     return gregorian.date(byAdding: .day, value: 1, to: sunday) 
    } 

    var endOfWeek: Date? { 
     let gregorian = Calendar(identifier: .gregorian) 
     guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil } 
     return gregorian.date(byAdding: .day, value: 7, to: sunday) 
    } 
} 

Vous pouvez obtenir la date de début de la semaine et la date de fin li ke this:

let startWeek = Date().startOfWeek 
let endWeek = Date().endOfWeek 

print(startWeek ?? "not found start date") 
print(endWeek ?? "not found end date") 
+0

comment ajouter le formateur de date, je veux la réponse dans comme dd-mm-yyyy – Ram

+0

@ kishan juste que vous devez convertir la date startWeek à un autre format de date. – Rushabh

+0

une fois voir ci-dessus mon code. J'emploie le formateur de date même si je n'obtiens pas le résultat attendu. – Ram