2016-07-06 40 views
0

我想知道當前和去年的天數。我設法提出了這個代碼,它會給我一個開始和結束的日期。如何獲取當前/去年的天數

然後我用NSDateComponents來得到這一年的天數。但我得到的是365,這意味着去年的天數。

我如何正確地獲得上一年和當年的天數?

func numOfDaysInYear() { 
     let calendar = NSCalendar.currentCalendar() 
     var interval = NSTimeInterval(0) 
     var startOfYear: NSDate? 
     var endOfYear: NSDate! 
     calendar.rangeOfUnit(.Year, startDate: &startOfYear, interval: &interval, forDate: NSDate()) 
     endOfYear = startOfYear?.dateByAddingTimeInterval(interval - 1) 


     let comp = calendar.components(.Day, fromDate: startOfYear!, toDate: endOfYear, options: .MatchFirst) 
     print(comp.day) 
    } 

回答

1
endOfYear = startOfYear?.dateByAddingTimeInterval(interval - 1) 

給內日期當前年份,以及其 差異startOfYear爲365天23小時59秒,因此結果是365

你想要什麼是

let startOfNextYear = startOfYear!.dateByAddingTimeInterval(interval) 
let comp = calendar.components(.Day, fromDate: startOfYear!, toDate: startOfNextYear, options: .MatchFirst) 
print(comp.day) 

它給出了閏年2016的正確輸出366.

要獲得前一年的結果,只需更換當前的數據 NSDate()按日期「一年前」:

calendar.dateByAddingUnit(.Year, value: -1, toDate: NSDate(), options: []) 
1

替代做法

let calendar = NSCalendar.currentCalendar() 
let components = NSDateComponents() 
components.day = 1 
components.month = 1 
let nextFirstJanuar = calendar.nextDateAfterDate(NSDate(), matchingComponents: components, options: .MatchNextTime)! 
let thisFirstJanuar = calendar.nextDateAfterDate(nextFirstJanuar, matchingComponents: components, options: [.MatchNextTime, .SearchBackwards])! 
let lastFirstJanuar = calendar.nextDateAfterDate(thisFirstJanuar, matchingComponents: components, options: [.MatchNextTime, .SearchBackwards])! 

let daysInThisYear = calendar.components(.Day, fromDate: thisFirstJanuar, toDate: nextFirstJanuar, options: []).day 
let daysInLastYear = calendar.components(.Day, fromDate: lastFirstJanuar, toDate: thisFirstJanuar, options: []).day