UIDatePicker一個自定義日期選擇器獲取日期數據的問題
前言:最近公司UI出了一個自定義UIDatePicker的選擇器
自定義的UI簡單,但是顯示的日期數據還要自己算平閏年嗎???
所以自己寫了一個日期數據生產function
懶,寫的很粗糙
(from: currentYear! - 80, through: currentYear)81年的,其他年隨意改吧
func getDaysInMonth( year: Int, month: Int) -> Int
{
let calendar = Calendar.current
var startComps = DateComponents()
startComps.day = 1
startComps.month = month
startComps.year = year
var endComps = DateComponents()
endComps.day = 1
endComps.month = month == 12 ? 1 : month + 1
endComps.year = month == 12 ? year + 1 : year
let startDate = calendar.date(from: startComps)
let endDate = calendar.date(from:endComps)
let diff = calendar.dateComponents([.day], from: startComps, to: endComps)
return diff.day!
}
//
//getDaysInMonth(year: 2019, month: 4)
struct Year {
let name: String
let months: [Month]
}
struct Month {
let name: String
let days: [String]
}
var subdivisionsData: [Year] = {
var localData : [[String: [[String: [String]]]]] = [[String: [[String: [String]]]]]()
let currentYear = Calendar.current.dateComponents(in: TimeZone(identifier:"Asia/Shanghai")!, from: Date()).year
var years : [Year] = [Year]()
for year in stride(from: currentYear! - 80, through: currentYear!, by: 1) {
var days : [String] = [String]()
var months : [Month] = [Month]()
defer{
years.append(Year.init(name: String(format: "%d", year), months: months))
}
for month in 1...12 {
defer{
months.append( Month.init(name: String(format: "%d", month), days: days) )
days.removeAll()
}
for day in 1...getDaysInMonth(year: year, month: month) {
days.append(String(format: "%d", day))
}
}
}
return years
}()
print(subdivisionsData[0])