这个问题在这里已有答案:
我怎样才能确定两个 NSDate
值之间的天数(考虑到时间)?
NSDate
值的格式为 [NSDate date]
.
具体来说,当用户在我的iPhone应用程序中进入非活动状态时,我存储以下值:
exitDate = [NSDate date];
当他们打开应用程序备份时,我得到当前时间:
NSDate *now = [NSDate date];
现在我想实现以下内容:
-(int)numberOfDaysBetweenStartDate:exitDate andEndDate:now
16 回答
这是我用来确定两个日期之间的日历天数的实现:
EDIT:
上面的神奇解决方案,这里的Swift版本作为
NSDate
的扩展:根据您的使用情况,您可能想要移除一些力量展开 .
上述解决方案也适用于当前时区以外的时区,非常适合显示世界各地信息的应用程序 .
这是我发现的最佳解决方案 . 似乎利用Apple批准的方法来确定NSDates之间的任何数量的单位 .
例如 . 如果您还想要几个月,那么您可以将'NSMonthCalendarUnit'作为unitFlag包含在内 .
为了归功于原始博主,我在这里找到了这个信息(虽然我上面已经修改了一个小错误):http://cocoamatic.blogspot.com/2010/09/nsdate-number-of-days-between-two-dates.html?showComment=1306198273659#c6501446329564880344
Swift 3.0 Update
Swift 2.0 Update
Original Solution
Swift的另一个解决方案 .
如果您的目的是获取两个日期之间的确切日期数,您可以解决此问题,如下所示:
我将它用作NSDate类的类别方法
我需要两个日期之间的天数,包括开始日期 . 例如在2012年2月14日至2012年2月2日之间的几天将产生3的结果 .
请注意,提供日期的顺序无关紧要 . 它将始终返回正数 .
dateDiff将是两个日期之间的秒数 . 只需除以一天中的秒数即可 .
@布赖恩
布莱恩的答案很好,只计算24小时的天数差异,但不计算日历差异 . 例如12月24日23:59离圣诞节只有1分钟的距离,目的是许多申请被认为仍然是一天 . Brian的daysBetween函数将返回0 .
借用Brian的原始实现和一天的开始/结束,我在我的程序中使用以下内容:(NSDate beginning of day and end of day)
另一种方法:
具有优于
timeIntervalSince...
方案的优势,可以考虑时区,并且在一天的短时间或长时间内没有间隔的模糊性 .并且比NSDateComponents方法更紧凑,更少混乱 .
只需为访问此页面的人添加一个答案,试图在Swift中执行此操作 . 方法几乎相同 .
在以下方法的讨论部分中找到了这个答案here:
这是在Swift中Brian的函数的实现:
你的意思是日历日或24小时?即星期二上午6点,星期三上午6点,或不到一天?
如果你的意思是前者,那么's a bit complicated and you'将不得不诉诸于
NSCalendar
和NSDateComponent
的操纵,我不记得我的头脑 .如果你的意思是后者,只需获取自参考日期以来的日期时间间隔,从另一个中减去一个,然后除以24小时(
24 * 60 * 60
)得到大致的间隔,不包括闰秒 .有一个,不确定它是你想要的,但它可以帮助你们中的一些人,(帮帮我!!)
我的目标是知道在两个日期之间(差异小于24小时)我是否有“过日”日1:
我做了以下(我承认有点过时)
NSDate已经被另一个NSDateFormatter格式化了(这个只是为了这个目的:)
也许这样的东西已经存在,但没有找到它
蒂姆
我找到的解决方案是:
在这里,我有效地将第一个日期从一天开始,然后计算出Jonathan建议的差异......
我已经发布了一个开源类/库来做这件事 .
看看RelativeDateDescriptor,可以用来获得如下的时差......
为什么不呢:
为什么要注意使用以下NSDate方法:
这将返回两个日期之间的秒数,你可以除以86,400来获得天数!!