Wowsers, widzę wiele odpowiedzi tutaj, ale wiele z nich jest długi lub trudne do zrozumienia, więc postaram się rzucić w moim 2 centów w przypadku to pomaga. Klasa NSCalendar
zapewnia wymaganą funkcjonalność w bezpieczny i zwięzły sposób. Oto rozwiązanie, które działa dla mnie, bez pomnożenia interwałów sekundowych, zaokrągleń lub czegokolwiek. NSCalendar
uwzględnia dni/lata przestępne oraz inne dziwności czasu i daty. (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()
Może być dodany do przedłużenia na NSDate
razie potrzeby lub w funkcji free-form powrocie nowy NSDate
przykład, co trzeba. Mam nadzieję, że to pomoże każdemu, kto tego potrzebuje.
Swift 3 Aktualizacja
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()
można oszukać i uzyskać 'timeIntervalSince ...”, a wokół niego Ponieważ wszystkie (racjonalny) stref czasowych przynajmniej wyrównać na granicach 5-minutowych to będzie działać, nawet. jeśli da to purystom pasuje. (* Zwłaszcza * jeśli pasuje do purystów;) –
@HotLicks Wątpię, że to zadziała, jeśli weźmiesz pod uwagę rzeczy takie jak sekundy przestępne. Czas na Wallclock nie zmienia się tak liniowo i przewidywalnie. – Mecki
@Mecki - NSDate nie bierze pod uwagę sekund przestępnych –