2015-03-05 4 views
8

Ich habe dateformat Zeichenfolge wie diese "2015-03-09" .Wie bekomme ich nächste 10 Tage Datum ab dem aktuellen Datum? Jede Hilfe wird geschätzt werden.Danke im VorausWie bekomme ich die nächsten 10 Tage vom aktuellen Datum in swift

+0

Sie nächsten 10 Tage So brauchen von diesem Datum? –

+2

Sie haben Apples "Date and Time Programming Guide" gelesen, nicht wahr? Was hast du versucht und wo steckst du fest? –

Antwort

3

Es gibt eine Funktion 'dateByAddingTimeInterval()' für ein NSDate-Objekt. Damit können Sie ein NSDate aus Ihrer Datumszeichenkette erstellen. Dann 10 Tage hinzufügen = 10 * 24 * 60 * 60 nächsten 10 Tage NSDate Wert

let today : NSDate = .... 
let next10days = today.dateByAddingTimeInterval(10*60*60*24); //interval = seconds 
//then you convert back to your date string format if you want, by using NSDateFormatter 

Um zu vermeiden Problem mit DaylightTime Speicher (@MartinR) zu erhalten:

let cal = NSCalendar(calendarIdentifier: NSGregorianCalendar) 
let next10Days = cal.dateByAddingUnit(NSCalendarUnit.DayCalendarUnit, value: 10, toDate: today, options: nil) 
+4

Nein, ein Tag ist nicht dasselbe wie 60 * 60 * 24 Sekunden. In Regionen mit Sommerzeit kann ein Tag 23 oder 25 Stunden haben. –

+0

Ja, diese Lösung wird einen 'Fehler' haben, wenn wir zu Sommerzeit oder Winterzeit wechseln. Wir sollten NSCalendar verwenden. –

+0

speicherte meine Zeit :) – Anton

6

Sie verwenden, um die dateByAddingTimeInterval() Methode dafür.

var dateStr   = "2015-03-09" 
var formatter  = NSDateFormatter() 
formatter.dateFormat = "YYYY-MM-dd" 
var currDate   = formatter.dateFromString(dateStr) 

for i in 1...10 
{ 
    var interval = NSTimeInterval(60 * 60 * 24 * i) 
    var newDate = currDate?.dateByAddingTimeInterval(interval) 
    println(newDate) 
} 

EDIT:

Wie @ Martin R in den Kommentaren erwähnt, wird es besser sein dateByAddingComponents() von NSCalendar Klasse zu verwenden:

var calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar) 
var dateComponent = NSDateComponents() 

for i in 1...10 
{ 
    dateComponent.day = i 
    var newDate = calendar?.dateByAddingComponents(dateComponent, toDate: currDate!, options:nil) 
    println(newDate) 

} 
+1

Mein Kommentar zu der anderen Antwort gilt auch hier. –

+0

@MartinR: Er braucht nur die nächsten 10 Termine, oder? Es gibt keine Zeit in der Datumszeichenkette, die er hat. Also denke ich, dass das in diesem Fall kein Problem verursachen wird. Korrigieren Sie mich, wenn ich falsch liege –

+2

Die richtige Methode zum Hinzufügen eines Tages ist die Verwendung von NSCalendar und NSDateComponents. –

15

Hier ist, wie ein Datum erhalten In 10 Tagen, mit eingebauter Datumsmodifikationsmethode .dateByAddingUnit Wenn alle 10 Tage (Daten) benötigt werden, können sie durch den "value: 10" -Teil geloopt und zum Array hinzugefügt werden.

var tenDaysfromNow: NSDate { 
    return NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: 10, toDate: NSDate(), options: [])! 
    } 

    print(tenDaysfromNow) 

Und für swift3:

var tenDaysfromNow: Date { 
    return (Calendar.current as NSCalendar).date(byAdding: .day, value: 10, to: Date(), options: [])! 
} 
+0

Kalender hat kein Mitglied 'dateByAddingUnit' –

+0

Natürlich. Das war Swift2. Jetzt für Swift 3: var tenDaysfromNow: Datum { return (Calendar.current als NSCalendar) .date (durch Hinzufügen: .day, value: 10, to: Date(), options: [])! } – thinkswift

+0

Was wäre der richtige Weg, um die nächsten 10 Tage ab einem bestimmten Datum zu bekommen? Swift 3-Antwort in einer Funktion verwenden. Zum Beispiel: 'fun getTenDaysFromDate (Datum: Datum) -> Datum {...}' –

-4

Für Swift 3:

let now = NSDate() 
let plusTen = now.dateByAddingDays(10) 
+2

NSDate hat kein Mitglied 'dateByAddingDays'. Sie müssen dazu eine Erweiterung verwenden. –

11

Für eine rein Swift 3 Lösung:

Calendar.current.date(byAdding: .day, value: 10, to: Date())

Verwandte Themen