拆分NSDate,连续几天延伸到几个跨度

时间:2015-03-28 15:14:31

标签: ios objective-c nsdate timespan nsdatecomponents

我有2个NSDate定义了一个span,可以像这样设置它们

spanA: 12:00 today
spanB: 12:00 tomorrow

这相当于24小时,但我需要创建两个范围而不是一个范围,这样在午夜就不会延伸。上面示例的结果如下所示:

spanA: 12:00 today
spanB: 23:59 today

spanC: 00:01 tomorrow
spanD: 12:00 tomorrow

我不知道该怎么做。我想出了一个使用这样的函数的想法:

- (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];
}

返回跨度延伸的天数,换句话说:返回所需的跨距数。然后我可以例如for循环天数并添加一些逻辑来创建必要的跨度。

我正在使用它作为跨度的结构:

typedef struct
{
NSTimeInterval start;
NSTimeInterval end;
} span;

最好的办法是什么?

1 个答案:

答案 0 :(得分:2)

由于除了可能的第一个和最后一个跨度之外的所有跨度都是相同的一天跨度,因此您可以使用此算法:

  • 检查初始时间是否是午夜。如果不是午夜,则从当天的开始到午夜添加一个开放范围
  • 对于第一个午夜之后的每一天,将一天的范围添加到第二天的午夜
  • 检查最后一次是否是午夜。如果不是午夜,请在结果中添加结束范围。