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
Odpowiedz
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)
Nie, dzień to nie to samo co 60 * 60 * 24 sekundy. W regionach z czasem letnim dzień może mieć 23 lub 25 godzin. –
Tak, to rozwiązanie będzie miało "błąd", gdy zmienimy na czas letni lub czas zimowy. Powinniśmy używać NSCalendar. –
zaoszczędziłem mój czas :) – Anton
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)
}
Mój komentarz do drugiej odpowiedzi dotyczy również tutaj. –
@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ę –
Właściwy sposób na dodanie dnia to użycie NSCalendar i NSDateComponents. –
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: [])!
}
Kalendarz nie ma członka "dateByAddingUnit" –
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
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 {...}' –
Dla Swift 3:
let now = NSDate()
let plusTen = now.dateByAddingDays(10)
NSDate nie ma członka "dateByAddingDays". Aby to zrobić, musisz użyć rozszerzenia. –
Dla czysto Swift 3 rozwiązania:
Calendar.current.date(byAdding: .day, value: 10, to: Date())
Więc trzeba 10 następnych dni od tej daty? –
Czy przeczytałeś "Przewodnik programowania w czasie i czasie" firmy Apple, prawda? Czego próbowałeś i gdzie utknąłeś? –