swift 3 получение списка ближайших часовых кварталов
Хорошо, у меня есть let date = Date()
в Swift 3, и мне нужно получить список ближайших часовых кварталов.
Допустим, текущая дата равна 2017-02-08 15:24:56 +0000
, так что желаемый список будет
2017-02-08 15:30:00 +0000
2017-02-08 15:45:00 +0000
2017-02-08 16:00:00 +0000
Как я могу получить этот список дат?
EDIT 1 2/8/2017 5: 54 PM
Вот то, что я только что пытался сделать, и похоже, что это даст нужные мне результаты.
let currentDate = Date()
var minute = Calendar.current.component(.minute, from: currentDate)
if minute < 15 {
minute = 15
} else if minute < 30 {
minute = 30
} else if minute < 45 {
minute = 45
} else {
minute = 0
}
var hourQuarterDate = Calendar.current.nextDate(after: currentDate, matching: DateComponents(minute: minute), matchingPolicy: .strict, repeatedTimePolicy: .first, direction: .forward)!
var hourQuarters = [Date]()
hourQuarters.append(hourQuarterDate)
for _ in 1...10 {
hourQuarterDate = Calendar.current.date(byAdding: .minute, value: 15, to: hourQuarterDate)!
hourQuarters.append(hourQuarterDate)
}
1 ответ:
Ваша правка была полезной. Вот небольшая вариация, которую я реализовал на ее основе.
Мой главный шаг-округлить текущую дату до последней четверти часа:
// Parameters let minuteGranuity = 15 let numberOfDates = 4 // Find current date and date components let now = Date() //2017-03-06 13:23:40 +0000 let calendar = Calendar.current let hour = calendar.component(.hour, from: now) let minute = calendar.component(.minute, from: now) // Round down to nearest date: let floorMinute = minute - (minute % minuteGranuity) let floorDate = calendar.date(bySettingHour: hour, minute: floorMinute, second: 0, of: now)!
, как в вашем редактирования, я использую "дата(byAdding:" метод, чтобы добавить 15-минутные интервалы, что дата основания:
var dates: [Date] = [] for minutes in stride(from: minuteGranuity, through: minuteGranuity*numberOfDates, by: minuteGranuity) { let newDate = calendar.date(byAdding: .minute, value: minutes, to: floorDate)! dates.append(newDate) } for date in dates { print(date) } // 2017-03-06 13:30:00 +0000 // 2017-03-06 13:45:00 +0000 // 2017-03-06 14:00:00 +0000 // 2017-03-06 14:15:00 +0000