NSCalendar

Episode #219 | 8 minutes | published on May 6, 2016 | Uses swift-2.3
Subscribers Only
NSCalendar is a class that is easy to dismiss as standard, but is packed full of really useful functions. In this episode I talk about how I solved a problem using NSDateComponents, then came back and solved it in a much cleaner way using new methods on NSCalendar.

Episode Links

Example Code

import Foundation


let times = [ 6 ]

let secondsInADay = 60 * 60 * 24
let oneWeek = secondsInADay * 7 // bad

let date = NSDate()

let calendar = NSCalendar.currentCalendar()
calendar.calendarIdentifier

let nextWeek = calendar.dateByAddingUnit(.Day, value: 7, toDate: date, options: [])


let units: NSCalendarUnit = [.Year, .Month, .Day, .Hour, .Minute, .Second]
let dateComponents = calendar.components(units, fromDate: date)

dateComponents.year
dateComponents.month
dateComponents.day
dateComponents.hour

let nextHour = times.filter { $0 > dateComponents.hour }.first
if let nextHour = nextHour {
    dateComponents.hour = nextHour
} else {
    dateComponents.day + 1
    dateComponents.hour = times.first! // + 24
}

dateComponents.minute = 0
dateComponents.second = 0
dateComponents.calendar = calendar

dateComponents.date

calendar.nextDateAfterDate(date, matchingHour: 5, minute: 30, second: 0, options: .MatchNextTime)
blog comments powered by Disqus