2015-02-25 17 views
16

Số ngày trong năm có thể được tìm thấy nhanh như thế nào? Có cách nào đơn giản mà tôi không nhìn thấy hay tôi phải tìm số giây từ ngày 1 tháng 1 đến ngày hiện tại và chia cho số giây trong một ngày?Ngày NSDate trong năm (nhanh)

Trả lời

32

Đây là bản dịch của câu trả lời cho 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) 

Điều này cho phép 1 cho ngày đầu tiên trong năm, và 56 = 31 + 25 cho ngày hôm nay (ngày 25 tháng 2).

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

Đây sẽ là một cách tiếp cận sai, bởi vì một ngày không có một cố định số giây (chuyển đổi từ hoặc Daylight Saving Time).

+0

tại sao phương pháp của bạn trả về 56 mỏ 55? –

+0

@LeonardoSavioDabus: Xem câu trả lời được cập nhật: Phương thức này trả về 1 cho ngày đầu tiên trong năm. –

+0

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

4

Không hề !!! Tất cả bạn phải làm là sử dụng NSCalendar để giúp bạn làm các phép tính lịch của bạn như sau:

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

này hoạt động là tốt. –

0

Bạn có thể tìm ra số ngày kể từ ngày bạn như thế này:

let date = NSDate() // your date 

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

println(days) 
+1

Có gì 'cal' ở đây? – DarkDust

+0

Đó là đối tượng của NSCalendar –

+0

@KananVora hơn là bạn nên thêm đối tượng vào mã –

2

Swift 3

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

sử dụng như

Date().dayOfYear 
Các vấn đề liên quan