NSDate day of the year (swift)

2020-05-25 02:43发布

How might the day number of the year be found with swift? Is there a simple way that I'm not seeing, 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?

标签: ios swift nsdate
4条回答
够拽才男人
2楼-- · 2020-05-25 03:04

Swift 3

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

use like

Date().dayOfYear
查看更多
smile是对你的礼貌
3楼-- · 2020-05-25 03:11

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).

查看更多
三岁会撩人
4楼-- · 2020-05-25 03:11

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
查看更多
疯言疯语
5楼-- · 2020-05-25 03:17

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)
查看更多
登录 后发表回答