【发布时间】:2012-11-09 07:30:38
【问题描述】:
场景:
我有一个费用跟踪 iOS 应用程序,我将费用从费用详细视图控制器存储到表视图(带有获取的结果控制器)中,该表视图显示费用列表以及类别、金额和日期。我的实体“Money”中确实有一个日期属性,它是支出或收入的父实体。
问题:
我想要的基本上是对给定一周、一个月或一年的费用进行分类,并将其显示为部分标题标题,例如:(2012 年 10 月 1 日至 10 月 7 日),它显示了费用金额和相关内容根据那个特定的星期。该视图中提供了两个按钮,如果我按下右侧按钮,它将一周增加一周(2012 年 10 月 1 日至 10 月 7 日现在显示 2012 年 10 月 8 日至 10 月 15 日),同样,左侧按钮将减少一周一个星期。
我将如何做到这一点?我正在尝试以下代码 - 不起作用。
- (void)weekCalculation
{
NSDate *today = [NSDate date]; // present date (current date)
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* comps = [calendar components:NSYearForWeekOfYearCalendarUnit |NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:today];
[comps setWeekday:1]; // 1: Sunday
firstDateOfTheWeek = [[calendar dateFromComponents:comps] retain];
[comps setWeekday:7]; // 7: Saturday
lastDateOfTheWeek = [[calendar dateFromComponents:comps] retain];
NSLog(@" first date of week =%@", firstDateOfTheWeek);
NSLog(@" last date of week =%@", lastDateOfTheWeek);
firstDateOfWeek = [dateFormatter stringFromDate:firstDateOfTheWeek];
lastDateOfWeek = [dateFormatter stringFromDate:lastDateOfTheWeek];
}
递增日期代码 -
- (IBAction)showNextDates:(id)sender
{
int addDaysCount = 7;
NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease];
[dateComponents setDay:addDaysCount];
NSDate *newDate1 = [[NSCalendar currentCalendar]
dateByAddingComponents:dateComponents
toDate:firstDateOfTheWeek options:0];
NSDate *newDate2 = [[NSCalendar currentCalendar]
dateByAddingComponents:dateComponents
toDate:lastDateOfTheWeek options:0];
NSLog(@" new dates =%@ %@", newDate1, newDate2);
}
假设星期显示如下(2012 年 11 月 4 日 - 2012 年 11 月 10 日),我按下增量按钮,我在控制台中看到,日期更改为 2012 年 11 月 11 日和 2012 年 11 月 17 日,这是正确的,但如果我按下再次增加按钮,它再次显示相同的日期(2012 年 11 月 11 日和 2012 年 11 月 17 日)。
请帮帮我。
【问题讨论】:
-
您的 firstDateOfWeek 和 lastDateOfWeek 是字符串而不是日期。在[[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:firstDateOfTheWeek options:0];中使用时,需要转换为日期。
-
@ACB 你读错了。它们只是日期。先生,请仔细阅读。
-
@ACB 你认为这段代码应该把日期增加一周吗,不管增加按钮被按下多少次?
-
哦,好吧。 firstDateOfWeek 和 lastDateOfTheWeek 看起来令人困惑。在这种情况下,您可以打印 lastDateOfTheWeek 并检查再次递增之前的日期吗?
-
NSDate 今天 = [NSDate 日期]; // 当前日期(当前日期) NSDateComponents comps = [日历组件:NSYear..Unit fromDate:today];所以它总是从今天开始计算,对吧?如果我是正确的,您应该在此处切换到新日期。
标签: ios nsdate nsdateformatter nsdatecomponents