我正在构建一个日历视图,我希望与年份无关,只需列出一个月内可能发生的所有可能日期。 IE。显示日历中的最大天数,例如 2 月 29 日。从这个答案 https://stackoverflow.com/questions/41318604/is-there-a-way-to-determine-if-a-year-has-a-leap-month-in-swift,我知道还有其他日历系统也有闰日,所以我很好奇如何能够判断日历是否有闰日,无论日历系统或年份如何。任何帮助将不胜感激!这是我目前获取一个月中的天数的内容:
func days(in month: Int) -> Int {
let components = DateComponents(month: month+1, day: -1)
let lastDay = Calendar.current.date(from: components)!
return Calendar.current.dateComponents([.day], from: lastDay).day!+1
}
这很好用,但基于当前年份,可能不是闰年。
我见过isLeapMonth
但这似乎不适用于以相同的方式进行查询.day
.
编辑/更新:
您可以获取当前日历的下一个闰年并检查该月的最大天数,也许是这样的:
extension Date {
var year: Int { Calendar.current.component(.year, from: self) }
var isLeapYear: Bool { Calendar.current.range(of: .day, in: .year, for: self)!.count == 366 }
// find the leap year
static var leapYear: Int {
var year = Date().year
while DateComponents(calendar: .current, year: year).date?.isLeapYear == false {
year += 1
}
return year
}
}
Date.leapYear // 2020
func maximumNumberOfDays(in month: Int) -> Int? {
Calendar.current.range(of: .day,
in: .month,
for: DateComponents(calendar: .current,
year: Date.leapYear,
month: month).date!)?.count
}
maximumNumberOfDays(in: 2) // 29
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)