UIDatePicker一個自定義日期選擇器獲取日期數據的問題

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])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章