两个 NSDates 之间的天数 [英] Number of days between two NSDates
问题描述
如何确定两个 NSDate
值之间的天数(还要考虑时间)?
How could I determine the number of days between two NSDate
values (taking into consideration time as well)?
NSDate
值是 [NSDate date]
所采用的任何形式.
The NSDate
values are in whatever form [NSDate date]
takes.
具体来说,当用户在我的 iPhone 应用程序中进入非活动状态时,我会存储以下值:
Specifically, when a user enters the inactive state in my iPhone app, I store the following value:
exitDate = [NSDate date];
当他们重新打开应用程序时,我会得到当前时间:
And when they open the app back up, I get the current time:
NSDate *now = [NSDate date];
现在我想实现以下内容:
Now I'd like to implement the following:
-(int)numberOfDaysBetweenStartDate:exitDate andEndDate:now
推荐答案
这是我用来确定两个日期之间的日历天数的实现:
Here's an implementation I used to determine the number of calendar days between two dates:
+ (NSInteger)daysBetweenDate:(NSDate*)fromDateTime andDate:(NSDate*)toDateTime
{
NSDate *fromDate;
NSDate *toDate;
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar rangeOfUnit:NSCalendarUnitDay startDate:&fromDate
interval:NULL forDate:fromDateTime];
[calendar rangeOfUnit:NSCalendarUnitDay startDate:&toDate
interval:NULL forDate:toDateTime];
NSDateComponents *difference = [calendar components:NSCalendarUnitDay
fromDate:fromDate toDate:toDate options:0];
return [difference day];
}
上面的绝妙解决方案,下面是 Swift 版本作为 NSDate
的扩展:
Fantastic solution above, here's Swift version below as an extension on NSDate
:
extension NSDate {
func numberOfDaysUntilDateTime(toDateTime: NSDate, inTimeZone timeZone: NSTimeZone? = nil) -> Int {
let calendar = NSCalendar.currentCalendar()
if let timeZone = timeZone {
calendar.timeZone = timeZone
}
var fromDate: NSDate?, toDate: NSDate?
calendar.rangeOfUnit(.Day, startDate: &fromDate, interval: nil, forDate: self)
calendar.rangeOfUnit(.Day, startDate: &toDate, interval: nil, forDate: toDateTime)
let difference = calendar.components(.Day, fromDate: fromDate!, toDate: toDate!, options: [])
return difference.day
}
}
根据您的用例,您可能想要删除一些强制展开.
A bit of force unwrapping going on which you may want to remove depending on your use case.
上述解决方案也适用于当前时区以外的时区,非常适合显示世界各地地点信息的应用.
The above solution also works for time zones other than the current time zone, perfect for an app that shows information about places all around the world.
这篇关于两个 NSDates 之间的天数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!