Разделить последние два часа на 10-минутные ломтики - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь получить каждые 10 минут последнего часа.

Например, сейчас 15: 46: 41

Я хочу [15:40:00, 15:30:00, 15:20:00, 15:10:00, 15: 00: 00, 14:50:00, 14:40:00, 14:30:00, 14:20:00, 14:10:00, 14:00:00, 13:50:00, 13:40: 00]

let calendar = Calendar.current
let now = Date()
var components = DateComponents()
components.hour = -2
if let early = calendar.date(byAdding: components, to: now) {
    let nowMin = calendar.component(.minute, from: early)
    let diff = 10 - (nowMin % 10)
    components.minute = diff
    var minutes: [Int] = []
    for _ in 0...13 {
        // I cant figure out what should I do next.
    }
    print(minutes)
}

1 Ответ

1 голос
/ 25 сентября 2019

Вы можете получить текущую минуту, получить остаток от этого значения, деленный на десять, и вычесть его из этого значения.Таким образом, вы получаете последнюю десятую часовую минуту, тогда вам просто нужно установить ее с тем же компонентом часа, чтобы найти первый элемент вашего массива.Далее вы можете заполнить оставшиеся даты, вычтя 10-минутное значение позиции элемента из начальной даты.Попробуйте так:

Xcode 11 • Swift 5.1 (для более старых версий просто добавьте оператор возврата как обычно)

extension Date {
    var hour: Int { Calendar.current.component(.hour, from: self) }
    var minute: Int { Calendar.current.component(.minute, from: self) }
    var previousHourTenth: Date { Calendar.current.date(bySettingHour: hour, minute: minute - minute % 10, second: 0, of: self)! }
    func lastNthHourTenth(n: Int) -> [Date] { (0..<n).map {  Calendar.current.date(byAdding: .minute, value: -10*$0, to: previousHourTenth)! } }
}

Тестирование игровой площадки

Date()                          // "Sep 25, 2019 at 10:19 AM"
Date().previousHourTenth        // "Sep 25, 2019 at 10:10 AM"
Date().lastNthHourTenth(n: 13)  // "Sep 25, 2019 at 10:10 AM", "Sep 25, 2019 at 10:00 AM", "Sep 25, 2019 at 9:50 AM", "Sep 25, 2019 at 9:40 AM", "Sep 25, 2019 at 9:30 AM", "Sep 25, 2019 at 9:20 AM", "Sep 25, 2019 at 9:10 AM", "Sep 25, 2019 at 9:00 AM", "Sep 25, 2019 at 8:50 AM", "Sep 25, 2019 at 8:40 AM", "Sep 25, 2019 at 8:30 AM", "Sep 25, 2019 at 8:20 AM", "Sep 25, 2019 at 8:10 AM"]

Теперь вам просто нужно использовать DateFormatter для отображения тех дат, которые необходимы пользователю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...