Ваш код не компилируется, потому что вы шагаете по целым числам, но вы определили свой Stride
как TimeInterval
.Если бы вы исправили тип dayDurationInSeconds
:
let dayDurationInSeconds: TimeInterval = 60*60*24
, это сделало бы большую часть того, что вы ожидали. Но это даст вам совершенно неверные результаты, потому что не каждый день длится 86 400 секунд.DST изменяет продолжительность дня два раза в год в зависимости от местоположения.
Правильный способ вычисления даты - с Calendar
.Если вы не используете Calendar
, вы не можете использовать ничего, что явно не выражено в секундах.
То, что вы можете захотеть, - это что-то вроде этого, которое перечисляет все ночи (UTC) междудаты в вопросе.Помните, что Date
в Foundation - это не «свидание».Это точный момент времени.Если вы действительно хотите работать с «датами», вам нужны DateComponents
.
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd"
let startDate = formatter.date(from: "2014/01/01")!
let endDate = formatter.date(from: "2019/03/31")!
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(identifier: "UTC")!
calendar.enumerateDates(startingAfter: startDate,
matching: DateComponents(hour: 0, minute: 0, second:0),
matchingPolicy: .nextTime) { (date, _, stop) in
guard let date = date, date < endDate else {
stop = true
return
}
print(date)
}