Angenommen, heute ist Mittwoch. Ich kann einen NSDate
hinunter in NSDateComponents
brechen, aber ich muss den NSDate
mit dem nächsten kommenden Montag finden. Wenn heute Montag ist, dann ist heute der nächste kommende Montag. Was ist der richtige Weg, dies zu erreichen?Finde NSDate für den nächsten spezifischen Wochentag für jedes Datum
Antwort
Sie nextDateAfterDate:
Methode auf NSCalendar
Objekt verwenden können, um dies zu erreichen,
let now = Date() // today
var matchingComponents = DateComponents()
matchingComponents.weekday = 2 // Monday
let comingMonday = Calendar.current.nextDate(after: now,
matching: matchingComponents,
matchingPolicy:.nextTime)
Hier ist eine einfache Methode, nächsten Montag zu finden. Wenn heute Montag ist, kommt die folgende Funktion heute oder sonst der nächste Montag zurück. Beachten Sie, dass de_POSIX_US so verwendet wird, dass die Tage übereinstimmen. Wenn die locale ist en_POSIX_US, Wochentage Symbole geworden,
["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
Und hier ist, wie diese Tage eingesetzt werden könnten,
func findNext(_ day: String, afterDate date: Date) -> Date? {
var calendar = Calendar.current
calendar.locale = Locale(identifier: "en_US_POSIX")
let weekDaySymbols = calendar.weekdaySymbols
let indexOfDay = weekDaySymbols.index(of: day)
assert(indexOfDay != nil, "day passed should be one of \(weekDaySymbols), invalid day: \(day)")
let weekDay = indexOfDay! + 1
let components = calendar.component(.weekday, from: date)
if components == weekDay {
return date
}
var matchingComponents = DateComponents()
matchingComponents.weekday = weekDay // Monday
let nextDay = calendar.nextDate(after: date,
matching: matchingComponents,
matchingPolicy:.nextTime)
return nextDay!
}
let nextMonday = findNext("Monday", afterDate: Date())
let mondayAfterThat = findNext("Monday", afterDate: nextMonday!)
let thursday = findNext("Thursday", afterDate: mondayAfterThat!)
das ist die beste Lösung, die ich denke :) –
Es ist erstaunlich, dass NSCalendar's iOS 8 Methoden immer noch undokumentiert in der Referenzbibliothek sind . – Desdenova
Ja, sie scheinen NSCalendar und Geschwister viele neue Apis hinzugefügt zu haben. Es wäre wirklich gut, sie dokumentieren zu lassen. – Sandeep
Sie können die Woche Tag erhalten, indem NSDateComponents
verwenden und die Intervall Tage berechnen, verwenden dann dateByAddingTimeInterval
von NSDate
wie so:
let now = NSDate()
let calendar: NSDateComponents = NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitWeekday, fromDate: now)
let weekday = calendar.weekday // 1 = Sunday, 2 = Monday
// You get input the weekday here and calculate the interval
// exmaple for moving to the next day
let expectedDate = now.dateByAddingTimeInterval(1 * 24 * 60 * 60)
// exmaple for moving to yesterday
let yesterday = now.dateByAddingTimeInterval(-1 * 24 * 60 * 60)
** Verwenden Sie nicht 24 * 60 * 60 Sekunden als Dauer eines Tages (denken Sie an Sommerzeitübergänge). –
@MartinR Entschuldigung. Ich folge nicht. Kannst du das nochmal erklären? –
Tage können 23, 24, 25 Stunden lang sein, aufgrund der Sommerzeit – vikingosegundo
für Ziel iOS> = 8-Lösung Verwendung GeneratorOfOne
sonst können Sie diese
let now = NSDate()
var lastMonday:NSDate?
var nextMonday:NSDate?
var start:NSDate?
var interval:NSTimeInterval = 0 // holds the length of a week. can differ for Daylight Saving Time
let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! // have a own calendar object for this calculation to guarantee that the next line does not influence other calculations
cal.firstWeekday = 2 // make sure first day of week is Monday.
cal.rangeOfUnit(NSCalendarUnit.CalendarUnitWeekOfMonth, startDate: &lastMonday, interval:&interval, forDate: now) // monday of current week
nextMonday = lastMonday?.dateByAddingTimeInterval(interval) // add a weeks length to the last weeks's monday
println(nextMonday)
- 1. Finden Sie das NSDate für nächsten Montag
- 2. Wie finde ich den Wochentag ab dem heutigen Datum mit NSDate?
- 3. Integer-Darstellung für den Wochentag
- 4. Convert Datum String Wochentag
- 5. Nächsten/vorherigen Wochentag einstellen
- 6. jQuery Finde den nächsten Eingang
- 7. SQL Count für jedes Datum
- 8. Swift: Wie bekomme ich Wochentag von nsdate
- 9. Anzahl Teilenummer für jedes Datum
- 10. Ziel C - Wie kann ich den Wochentag von NSDate bekommen?
- 11. Holen Sie den nächsten Wochentag nach dem gewählten Tag
- 12. Translating Datum Wochentag
- 13. Format Datum als Wochentag
- 14. Wählen Sie den nächsten Wochentag in einem Bereich
- 15. NSDate für den ersten Tag des Monats
- 16. Finde den nächsten Breiten- und Längengrad
- 17. Matlab - Finde Indizes des nächsten Nicht-Null-Elements für jedes Nullmatrixelement
- 18. SQL Query SUM für jedes Datum vom ersten Datum
- 19. Wie kann ich ein Datum für NSdate initialisieren?
- 20. Wie finde ich die Datumsangabe für das Jahr, den Monat, den Wochentag und die Woche in Ruby
- 21. Gegebenes Datum, Wochentag abrufen - SYSTEMTIME
- 22. Holen Sie sich die nächste LocalDateTime für einen bestimmten Wochentag
- 23. Wie bekomme ich NSDate für 00:00 am Tag [NSDate Datum]?
- 24. Wie finde ich den Unix-Timestamp für den Start des nächsten Tages in PHP?
- 25. NSDate: Werden Werte für morgen oder gestern
- 26. Holen Sie sich den vorherigen Dienstag (oder einen beliebigen Wochentag) für das angegebene Datum
- 27. Erhalte den Wochentag
- 28. gibt es den nächsten Eintrag mit Datum
- 29. Erstellen von eindeutigen URLs für jedes Datum im Codeigniter-Kalender
- 30. Anmerkung für spezifischen Datentyp
verwenden Sie können sich https://github.com/mysterioustrousers/MTDates, und es gibt eine 'mt_startOfNextWeek;' - Methode. –
Ich brauche eine Lösung ohne Bibliotheken für dritte Teile –
Meinst du den nächsten * kommenden * Montag, oder nur den * nächsten * (was könnte in der Vergangenheit oder in der Zukunft sein)? –