2015-02-25 13 views
16

Jak można szybko znaleźć numer dnia w roku? Czy istnieje prosty sposób, którego nie widzę, czy muszę znaleźć liczbę sekund od 1 stycznia do bieżącej daty i podzielić przez liczbę sekund w ciągu dnia?NSDate dzień roku (swift)

Odpowiedz

32

Jest to tłumaczenie z odpowiedzią na How do you calculate the day of the year for a specific date in 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) 

Daje 1 na pierwszy dzień w roku, a 56 = 31 + 25 na dzisiaj (25 lutego).

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

Byłby to błędne podejście, gdyż dzień nie mają stałego liczbę sekund (przejście z lub do czasu letniego).

+0

dlaczego Twoja metoda zwraca 56 kopalni 55? –

+0

@LeonardoSavioDabus: Zobacz zaktualizowaną odpowiedź: ta metoda zwraca 1 dla pierwszego dnia w roku. –

+0

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

4

Wcale nie !!! Wszystko co musisz zrobić, to użyć NSCalendar pomogą Ci zrobić swoje obliczenia kalendarzowe następujące:

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

Działa to również. –

0

można znaleźć liczbę dni od daty swojej tak:

let date = NSDate() // your date 

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

println(days) 
+1

Co to jest 'cal' tutaj? – DarkDust

+0

Jest to obiekt NSCalendar –

+0

@KananVora niż powinieneś dodać obiekt w kodzie –

2

Swift 3

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

wykorzystanie takich jak

Date().dayOfYear 
Powiązane problemy