2015-02-25 11 views
16

Wie könnte die Tagesnummer des Jahres mit swift gefunden werden? Gibt es einen einfachen Weg, den ich nicht sehen kann, oder muss ich die Anzahl der Sekunden vom 1. Januar bis zum aktuellen Datum finden und durch die Anzahl der Sekunden an einem Tag dividieren?NSDate Tag des Jahres (swift)

Antwort

32

Dies ist eine Übersetzung der Antwort auf How do you calculate the day of the year for a specific date in Objective-C? zu Swift: Sie tun, um Ihre Kalenderberechnungen wie folgt zu helfen, alles, was Sie tun müssen, ist NSCalendar zu verwenden.

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) 

Dies gibt 1 für den ersten Tag im Jahr, und 56 = 31 + 25 für heute (25. Februar).

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

Dies wäre ein falscher Ansatz, denn ein Tag keine feste Anzahl von Sekunden (Übergang von oder zu Sommerzeit) hat.

+0

Warum gibt Ihre Methode 56 mine 55 zurück? –

+0

@LeonardoSavioDabus: Siehe aktualisierte Antwort: Diese Methode gibt 1 für den ersten Tag des Jahres zurück. –

+0

NSCalendar.currentCalendar(). OrdinalityOfUnit (.CalendarUnitDay, inUnit: .CalendarUnitYear, forDate: NSDate()) –

4

Überhaupt nicht !!!

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 
+2

Dies funktioniert auch. –

0

Sie können die Anzahl der Tage seit dem Sie das Datum wie diese finden:

let date = NSDate() // your date 

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

println(days) 
+1

Was ist 'cal' hier? – DarkDust

+0

Es ist Objekt von NSCalendar –

+0

@KananVora, als Sie Objekt in Code hinzufügen sollten –

2

Swift 3

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

Verwendung wie

Date().dayOfYear 
Verwandte Themen