web-dev-qa-db-fra.com

NSDate jour de l'année (Swift)

Comment le nombre de jours de l'année peut-il être trouvé avec swift? Y at-il un moyen simple que je ne voie pas ou dois-je trouver le nombre de secondes entre le 1er janvier et la date du jour et le diviser par le nombre de secondes d'une journée? 

17
Dan Oswalt

Ceci est une traduction de la réponse à Comment calculez-vous le jour de l'année pour une date spécifique dans 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)

Cela donne 1 pour le premier jour de l'année et 56 = 31 + 25 pour aujourd'hui (25 février).

... ou dois-je trouver le nombre de secondes entre le 1er janvier et la date actuelle et le diviser par le nombre de secondes d'un jour

Ce serait une mauvaise approche, car un jour n'a pas un nombre de secondes Fixe (transition de ou vers l'heure d'été).

36
Martin R

Pas du tout !!! Tout ce que vous avez à faire est d’utiliser NSCalendar pour vous aider à calculer votre calendrier comme suit:

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
4
Leo Dabus

Swift 3

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

utiliser comme

Date().dayOfYear
2
Adam Smaka

Vous pouvez trouver le nombre de jours depuis votre date comme ceci:

let date = NSDate() // your date

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

println(days)
0
Kanan Vora