我创建可可的报告生成器,我需要制作方便的日期范围,如“今天”,“本周”,“这个月”,“今年”,等等。如何根据给定的NSDate生成方便的日期范围?
是否有好办法做到这一点?这里是我的骨架迄今:
@interface DateRange : NSObject
{
NSDate startDate;
NSDate endDate;
}
@property (nonatomic, retain) NSDate * startDate;
@property (nonatomic, retain) NSDate * endDate;
+ (DateRange *)rangeForDayContainingDate:(NSDate *)date;
+ (DateRange *)rangeForWeekContainingDate:(NSDate *)date;
+ (DateRange *)rangeForMonthContainingDate:(NSDate *)date;
+ (DateRange *)rangeForYearContainingDate:(NSDate *)date;
@end
一些示例用例将如下所示:
DateRange * thisWeek = [DateRange rangeForWeekContainingDate:[NSDate date]];
DateRange * thisYear = [DateRange rangeForYearContainingDate:[NSDate date]];
从本质上讲,我想返回DateRange
对象包含一周的开始和结束日期,月或目标日期周围的一年。例如(在伪代码):
NSDate * today = [August 25, 2009];
DateRange * thisWeek = [DateRange rangeForWeekContainingDate:today];
assert(thisWeek.startDate == [August 23, 3009]);
assert(thisWeek.endDate == [August 29, 3009]);
更新:
我能得到这个工作,感谢answer provided by Kendall Helmstetter Geln。这里是一个星期的范围完整的方法:
+ (DateRange *)rangeForWeekContainingDate:(NSDate *)date
{
DateRange * range = [[self alloc] init];
// start of the week
NSDate * firstDay;
[[self calendar] rangeOfUnit:NSWeekCalendarUnit
startDate:&firstDay
interval:0
forDate:date];
[range setStartDate:firstDay];
// end of the week
NSDateComponents * oneWeek = [[NSDateComponents alloc] init];
[oneWeek setWeek:1];
[range setEndDate:[[self calendar] dateByAddingComponents:oneWeek
toDate:firstDay
options:0]];
[oneWeek release];
return [range autorelease];
}
有一件事你可能想在您的解决方案改变是有'[[自我ALLOC ] init]'而不是'[[DateRange alloc ...',这样子类也会自己分配,而不是总是使用DateRange,它可能是它们的超类。 – jbrennan 2009-08-25 21:53:09
@ jbrennan:好点。我改变了它。 – 2009-08-25 23:56:56