2015-03-05 7 views
8

Mam ciąg daty podobny do tego "2015-03-09" .Jak otrzymać następną datę 10 dni od bieżącej daty? Każda pomoc zostanie doceniona. Thanks with advanceJak uzyskać następne 10 dni od bieżącej daty w trybie szybkim

+0

Więc trzeba 10 następnych dni od tej daty? –

+2

Czy przeczytałeś "Przewodnik programowania w czasie i czasie" firmy Apple, prawda? Czego próbowałeś i gdzie utknąłeś? –

Odpowiedz

3

Dla obiektu NSDate istnieje funkcja "dateByAddingTimeInterval()". Dzięki temu możesz utworzyć NSDate ze swojego ciągu daty. Następnie dodać 10 dni = 10 * 24 * 60 * 60, aby uzyskać kolejną wartość 10 dni NSDate

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 

Aby uniknąć problemu z ratowaniem Daylighttime (@MartinR):

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

Nie, dzień to nie to samo co 60 * 60 * 24 sekundy. W regionach z czasem letnim dzień może mieć 23 lub 25 godzin. –

+0

Tak, to rozwiązanie będzie miało "błąd", gdy zmienimy na czas letni lub czas zimowy. Powinniśmy używać NSCalendar. –

+0

zaoszczędziłem mój czas :) – Anton

6

Można użyć metody dateByAddingTimeInterval() dla tego.

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:

Jak wspomniano przez @Martin R w komentarzach, to będzie lepiej używać dateByAddingComponents() z NSCalendar Klasa:

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

Mój komentarz do drugiej odpowiedzi dotyczy również tutaj. –

+0

@MartinR: On potrzebuje tylko kolejnych 10 dat, prawda? Nie ma czasu w ciągu dat, który ma. Myślę więc, że nie spowoduje to żadnego problemu w tym przypadku. Popraw mnie, jeśli się mylę –

+2

Właściwy sposób na dodanie dnia to użycie NSCalendar i NSDateComponents. –

15

Oto jak uzyskać datę 10 dni od teraz, używając wbudowanej metody modyfikacji daty .dateByAddingUnit Jeśli wszystkie 10 dni (daty) są wymagane, można zapętlić je przez część "value: 10" i dodać do tablicy.

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

    print(tenDaysfromNow) 

I Swift3:

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

Kalendarz nie ma członka "dateByAddingUnit" –

+0

Oczywiście. To był Swift2. Teraz dla Swift 3: var tenDaysfromNow: Data { return (Calendar.current as NSCalendar) .date (przez dodanie: .day, wartość: 10, do: Date(), options: [])! } – thinkswift

+0

Jaki byłby właściwy sposób na uzyskanie kolejnych 10 dni od określonej daty? Używanie odpowiedzi Swift 3 w funkcji. Na przykład: 'fun getTenDaysFromDate (date: Date) -> Date {...}' –

-4

Dla Swift 3:

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

NSDate nie ma członka "dateByAddingDays". Aby to zrobić, musisz użyć rozszerzenia. –

11

Dla czysto Swift 3 rozwiązania:

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

Powiązane problemy