我要指出,应该编辑该问题以表明您希望知道如何列出月份,因为计算表示两个日期之间包含的月份数的整数可能是一项完全不同的任务。为此,清道夫的回答应该已经被认为是绰绰有余了。
我将尝试提供解决方案,以回应您澄清您想要月份列表的评论。
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