Как проверить, сколько раз определенный день встречается между двумя датами? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь подсчитать, сколько раз определенный день встречается между двумя датами, то есть с начальной и конечной дат в Swift. Я попытаюсь объяснить на примере.

У меня есть 3 значения. Это startDate, endDate и specificDate (конкретный день в месяце).

Скажем:

specificDate = 8    // specific day in a month
startDate = 07-11-2019
endDate = 07-01-2020

Из приведенного выше примера я могу сказать, что SpeccDate 8 происходит 2 раза между startDateи endDate, т. е. 8 ноября и 8 декабря.

Как я могу программно реализовать или выполнить это вычисление вхождений specificDate между двумя датами в Swift?

Приведенные выше значения приведены только для примера. Для этих полей может быть любое значение.

1 Ответ

1 голос
/ 07 ноября 2019

Одним из решений является использование метода Calendar nextDate(after:matching:matchingPolicy:), передающего экземпляр DateComponents с желаемым установленным днем.

extension Calendar {
    func count(of day: Int, between startDate: Date, and endDate: Date) -> Int {
        let matchComps = DateComponents(day: day)
        var dates = [Date]()
        var date = startDate
        while let matchingDate = self.nextDate(after: date, matching: matchComps, matchingPolicy: .nextTime), matchingDate <= endDate {
            dates.append(matchingDate)
            date = matchingDate
        }

        print("Found \(dates) between \(startDate) and \(endDate)")

        return dates.count
    }
}

let startDate = Calendar.current.date(from: DateComponents(year: 2019, month: 7, day: 11))!
let endDate = Calendar.current.date(from: DateComponents(year: 2020, month: 7, day: 1))!
let count = Calendar.current.count(of: 8, between: startDate, and: endDate)

Вывод:

Найдено [2019-08-08 06:00:00 +0000, 2019-09-08 06:00:00 +0000, 2019-10-08 06:00:00 +0000, 2019-11-08 07:00:00 +0000, 2019-12-08 07:00:00 +0000, 2020-01-08 07:00:00 +0000, 2020-02-08 07:00:00 +0000, 2020-03-08 07:00:00 +0000, 2020-04-08 06:00:00 +0000, 2020-05-08 06:00:00 +0000, 2020-06-08 06:00:00 +0000] между 2019-07-11 06:00:00 +0000 и 2020-07-01 06:00:00 + 0000

Конечно, точный результат будет зависеть от вашего часового пояса.

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