Search code examples
iosswiftmacosswift3nscalendar

Swift - Get date from day of year


We can get day of year for date using below line.

let day = cal.ordinalityOfUnit(.Day, inUnit: .Year, forDate: date)

But how can we get the date from day of year?


Solution

  • If you know the year you can get DateComponents date property as follow:

    extension Calendar {
        static let iso8601 = Calendar(identifier: .iso8601)
    }
    
    
    let now = Date()
    let day  = Calendar.iso8601.ordinality(of: .day, in: .year, for: now)!  // 121
    let year = Calendar.iso8601.component(.year, from: now)  // 2017
    let date = DateComponents(calendar: .iso8601, year: year, day: day).date   //  "May 1, 2017, 12:00 AM"
    

    or using DateFormatter

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy D"
    if let date = dateFormatter.date(from: "\(year) \(day)") {
        dateFormatter.dateStyle = .medium
        dateFormatter.timeStyle = .short
        dateFormatter.string(from: date)    // "May 1, 2017, 12:00 AM"
    }