Я хотел бы указать, что вопрос следует отредактировать, чтобы указать, что вы хотите знать, как перечислить месяцы, поскольку вычисление целого числа, обозначающего инклюзивное количество месяцев между двумя датами, может быть совершенно другой задачей. И для этого ответ подметальщика уже следует считать более чем адекватным.
Я попытаюсь дать решение в ответ на комментарий, в котором вы уточняете, что вам нужен список месяцев.
import UIKit
func makeDate(year: Int, month: Int, day: Int) -> Date {
let calendar = Calendar(identifier: .gregorian)
let components = DateComponents(year: year, month: month, day: day) //, hour: hr, minute: min, second: sec)
return calendar.date(from: components)!
}
let date1 = makeDate(year: 2016, month: 10, day: 23) // 23 OCT 2016
let date2 = makeDate(year: 2020, month: 7, day: 10) // 10 JULY 2020
func printMonths(date1: Date, date2: Date) {
guard date1 < date2 else {return}
let month1 = Calendar.current.component(.month, from: date1)
let month2 = Calendar.current.component(.month, from: date2)
let year1 = Calendar.current.component(.year, from: date1)
let year2 = Calendar.current.component(.year, from: date2)
if year1 == year2 {
for month in month1...month2 {
print(DateFormatter().monthSymbols[month - 1])
}
} else {
for year in year1...year2 {
print(year)
switch year {
case year1:
for month in month1...12 {
print(" \(DateFormatter().monthSymbols[month - 1])")
}
case year2:
for month in 1...month2 {
print(" \(DateFormatter().monthSymbols[month - 1])")
}
default:
for month in 1...12 {
print(" \(DateFormatter().monthSymbols[month - 1])")
}
}
print()
}
}
}
printMonths(date1: date1, date2: date2)
Эта функция будет печатать названия месяцев в порядке от date1 до date2, печатая годы для месяцев, если две даты имеют разные годы.
Его можно легко изменить для печати общего количества месяцев, просто используя счетчик каждый раз, когда печатается название месяца, если вы тоже этого хотите.
Вывод из примеров дат:
2016
October
November
December
2017
January
February
March
April
May
June
July
August
September
October
November
December
2018
January
February
March
April
May
June
July
August
September
October
November
December
2019
January
February
March
April
May
June
July
August
September
October
November
December
2020
January
February
March
April
May
June
July
03.03.2020
.day
при получении dateComponents из startDate и endDate, чтобы вместо этого получить результат 11 месяцев. 31.08.2020