如何在iphone中实现前一个次日按钮来更改日期

如何在iphone中实现前一个次日按钮来更改日期,iphone,objective-c,datepicker,nsdate,nsdateformatter,Iphone,Objective C,Datepicker,Nsdate,Nsdateformatter,如上图所示,我在标签上有一个日期(默认为当前日期)。格式为MM dd 我有两个按钮来更改第二天和前一天的日期 我应该如何使用这些按钮来实现更改日期 任何教程/建议(我不认为datepicker参与其中)使用这两个函数获取上一个日期和下一个日期,然后使用返回的日期,仅使用月份和年份显示在标签上 + (NSDate *) getDate:(NSDate *)fromDate daysAgo:(NSUInteger)days { NSDateComponents *dateComponents

如上图所示,我在标签上有一个日期(默认为当前日期)。格式为MM dd

我有两个按钮来更改第二天和前一天的日期

我应该如何使用这些按钮来实现更改日期


任何教程/建议(我不认为datepicker参与其中)

使用这两个函数获取上一个日期和下一个日期,然后使用返回的日期,仅使用月份和年份显示在标签上

+ (NSDate *) getDate:(NSDate *)fromDate daysAgo:(NSUInteger)days
{
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    dateComponents.day = -1*days;
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *previousDate = [calendar dateByAddingComponents:dateComponents
                                                     toDate:fromDate
                                                    options:0];
    [dateComponents release];
    return previousDate;
}

+ (NSDate *) getDate:(NSDate *)fromDate daysAhead:(NSUInteger)days
{
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    dateComponents.day = days;
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *previousDate = [calendar dateByAddingComponents:dateComponents
                                                     toDate:fromDate
                                                    options:0];
    [dateComponents release];
    return previousDate;
}
试试这些方法

- (NSDate *) dateByAddingDays: (int) dDays : (NSDate*)presntdate
{
NSTimeInterval aTimeInterval = [presntdate timeIntervalSinceReferenceDate] + 86400 * dDays;
NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
return newDate;
}

- (NSDate *) dateBySubtractingDays: (int) dDays : (NSDate*)presntdate
{
return [self dateByAddingDays: dDays*-1 :presntdate];
}

两种方法都有很好的内存泄漏。。。您没有释放dateComponents实例。顺便说一句,使用带符号的days参数一种方法就足够了。是的,如果你使用的是ARC,那么就不会有内存泄漏,兄弟:)当然,但我认为依靠编译器参数来正确处理内存不是一个好模式,或者至少这应该是你反馈的一部分。无论如何,我不想在这里争论。。我们都知道弧是如此糟糕:)增量/减量日期只在第一次单击“下一步”时日期没有增量您需要在每天的每次减量或增量后设置起始日期。当函数返回日期时,将其用作下一次工作的起始日期。如果时钟调整为夏令时,则一天的时间可以大于或小于24小时。仅在第一次单击“下一步”时,日期中没有增量