Wowsers, я вижу здесь много ответов, но многие из них длинные или трудные для понимания, поэтому я постараюсь добавить 2 цента на случай, если это поможет. Класс NSCalendar
обеспечивает необходимую функциональность безопасным и лаконичным способом. Вот решение, которое работает для меня, без умножения временных интервалов секунд, округления или чего-либо еще. NSCalendar
учитывает високосные дни / годы и другие странности времени и даты. (Swift 2.2)
let calendar = NSCalendar.currentCalendar()
let rightNow = NSDate()
let interval = 15
let nextDiff = interval - calendar.component(.Minute, fromDate: rightNow) % interval
let nextDate = calendar.dateByAddingUnit(.Minute, value: nextDiff, toDate: rightNow, options: []) ?? NSDate()
Он может быть добавлен к расширению на NSDate
, если необходимо, или как функция произвольной формы, возвращающая новый экземпляр NSDate
, что вам нужно. Надеюсь, это поможет всем, кто в этом нуждается.
Обновление Swift 3
let calendar = Calendar.current
let rightNow = Date()
let interval = 15
let nextDiff = interval - calendar.component(.minute, from: rightNow) % interval
let nextDate = calendar.date(byAdding: .minute, value: nextDiff, to: rightNow) ?? Date()