我創建可可的報告生成器,我需要製作方便的日期範圍,如「今天」,「本週」,「這個月」,「今年」,等等。如何根據給定的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