如何在Objective-C中获取两个日期之间的天数

3

我正在尝试制作一个标签,显示距事件还有多少天。我想要计算今天的日期和事件日期之间的差值。我使用了以下代码,但是它给了我一个负数-4600。在使用今天的日期之前,它运行得很好。

NSDateFormatter *f = [[NSDateFormatter alloc] init];
    [f setDateFormat:@"yyyy-MM-dd"];
    NSDate *startDate = [NSDate date];
    NSDate *endDate = [f dateFromString:end];
    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit
                                                        fromDate:startDate
                                                          toDate:endDate
                                                         options:0];
    return components.day;
return components.day;

你说是重复的那个问题,我已经使用了那个答案,但它并不起作用。 - user1898829
你验证过 NSDate *endDate = [f dateFromString:end] 返回的日期是否符合预期吗?- 字符串 end 包含什么内容? - Martin R
1
@user1898829 那么你应该在你的问题中提到这一点。 - borrrden
1个回答

16

默认情况下,[NSDate date] 返回的日期格式类似于 2013-08-06 08:50:25 +0000,如果你将格式化程序设置为 yyyy-MM-dd,那么你需要将起始日期转换成该格式。

请尝试这个方法:

NSDateFormatter *f = [[NSDateFormatter alloc] init];
    [f setDateFormat:@"yyyy-MM-ddHH:mm:ss ZZZ"];
    NSDate *startDate = [NSDate date];
    NSLog(@"%@",startDate);
    NSDate *endDate = [f dateFromString:end];
    NSLog(@"%@",endDate);


    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit
                                                        fromDate:startDate
                                                          toDate:endDate
                                                         options:0];
    return components.day; 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接