如何获取current/last年的天数
How to get the number of days of current/last year
我想找出今年和去年的天数。我设法想出了这段代码,它将给我一个开始和结束日期。
然后我使用 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)
}
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()
日期 "one year ago":
calendar.dateByAddingUnit(.Year, value: -1, toDate: NSDate(), options: [])
替代方法
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
我想找出今年和去年的天数。我设法想出了这段代码,它将给我一个开始和结束日期。
然后我使用 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)
}
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()
日期 "one year ago":
calendar.dateByAddingUnit(.Year, value: -1, toDate: NSDate(), options: [])
替代方法
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