NSDate day of the year (swift)

女生的网名这么多〃 提交于 2019-12-03 01:37:54
Martin R

This is a translation of the answer to How do you calculate the day of the year for a specific date in Objective-C? to Swift.

Swift 2:

let date = NSDate() // now
let cal = NSCalendar.currentCalendar()
let day = cal.ordinalityOfUnit(.Day, inUnit: .Year, forDate: date)
print(day)

Swift 3:

let date = Date() // now
let cal = Calendar.current
let day = cal.ordinality(of: .day, in: .year, for: date)
print(day)

This gives 1 for the first day in the year, and 56 = 31 + 25 for today (Feb 25).

... or do I have to find the number of seconds from Jan 1 to the current date and divide by the number of seconds in a day

This would be a wrong approach, because a day does not have a fixed number of seconds (transition from or to Daylight Saving Time).

Not at all !!! All you have to do is to use NSCalendar to help you do your calendar calculations as follow:

let firstDayOfTheYear  = NSCalendar.currentCalendar().dateWithEra(1, year: NSCalendar.currentCalendar().component(.CalendarUnitYear, fromDate: NSDate()), month: 1, day: 1, hour: 0, minute: 0, second: 0, nanosecond: 0)!   // "Jan 1, 2015, 12:00 AM"

let daysFromJanFirst = NSCalendar.currentCalendar().components(.CalendarUnitDay, fromDate: firstDayOfTheYear, toDate: NSDate(), options: nil).day   // 55

let secondsFromJanFirst = NSCalendar.currentCalendar().components(.CalendarUnitSecond, fromDate: firstDayOfTheYear, toDate: NSDate(), options: nil).second   // 4,770,357

Swift 3

extension Date {
    var dayOfYear: Int {
        return Calendar.current.ordinality(of: .day, in: .year, for: self)!
    }
}

use like

Date().dayOfYear

You can find the number of days since your date like this:

let date = NSDate() // your date

let days = cal.ordinalityOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitYear, forDate: date)

println(days)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!