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?
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é).
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
Swift 3
extension Date {
var dayOfYear: Int {
return Calendar.current.ordinality(of: .day, in: .year, for: self)!
}
}
utiliser comme
Date().dayOfYear
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)