День NSDate года (быстрый)

Как можно быстро найти номер дня года? Есть ли простой способ, который я не вижу, или мне нужно найти количество секунд с 1 января до текущей даты и разделить на количество секунд в день?

Ответы

Ответ 1

Это перевод ответа на Как вы вычисляете день года для определенной даты в Objective-C? для 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)

Это дает 1 для первого дня в году и 56 = 31 + 25 на сегодня (25 февраля).

... или мне нужно найти количество секунд с 1 января до текущей даты и делить на количество секунд в день

Это был бы неправильный подход, потому что день не имеет фиксированного количество секунд (переход от или к летнему времени).

Ответ 2

Совсем нет!!! Все, что вам нужно сделать, это использовать NSCalendar, чтобы помочь вам выполнить расчеты по календарю следующим образом:

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

Ответ 3

Swift 3

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

используйте как

Date().dayOfYear

Ответ 4

Вы можете найти количество дней с момента вашей даты:

let date = NSDate() // your date

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

println(days)