获取所有NSDate BETWEEN startDate和endDate

Dan*_*tay 6 iphone objective-c nsdate

我的问题是典型的"如何判断NSDate是否在startDate和endDate之间?"的反转?

我想要做的是找到在startWate和endDate之间发生的所有NSDATES(到当天,而不是小时或分钟).包括这些日期将是可取的,尽管没有必要.

示例:(我知道这些不代表NSDates,这些只是为了说明)

INPUT:startDate = 6/23/10 20:11:30 endDate = 6/27/10 02:15:00

输出:NSArray:6/23/10,6/24/10,6/25/10,6/26/10,6/27/10

我不介意做这项工作.只是我不知道在制作高效代码方面从哪里开始,而不必一点一点地逐步完成NSDates.

Joh*_*ool 9

使用NSCalendar实例将您的启动NSDate实例转换为NSDateComponents实例,添加1天NSDateComponents并使用NSCalendar它将其转换回NSDate实例.重复最后两个步骤,直到达到结束日期.

  • 梅西耶?不.更正确吗?是.Drawnonward的解决方案没有考虑由日历特性引起的任何问题,例如夏令时等.使用"NSCalendar"肯定是Apple推荐的方式. (4认同)
  • 那么,在这种情况下你可能会逃脱它,但一般来说放弃NSCalendar路线是一个坏习惯. (3认同)

dra*_*ard 5

添加24小时到开始日期,直到超过结束日期.

for ( nextDate = startDate ; [nextDate compare:endDate] < 0 ; nextDate = [nextDate addTimeInterval:24*60*60] ) {
  // use date
}
Run Code Online (Sandbox Code Playgroud)

如果您关心一天中的时间,您可以在开始循环之前将第一个日期舍入到中午或午夜.

  • 我使用"timeIntervalSinceDate:"而不是"compare:",因为timeIntervalSinceDate返回一个数值,虽然compare也有效.另外,"timeIntervalSinceDate"已被弃用,所以我使用了"dateByAddingTimeInterval:"我想做这样的事情,但不知道我可以像这样格式化循环.谢谢! (2认同)