iOS中当前和即将到来的日期之间的天数差异

时间:2012-11-14 05:16:00

标签: iphone objective-c xcode ios5

我通过我的帮助尝试了很多东西,但我仍然无法弄清楚如何正确地做到这一点。这是我最后做的。

NSDateFormatter *tempFormatter = [[NSDateFormatter alloc]init];
[tempFormatter setDateFormat:@"dd-MM-yyy"];

NSDate *currentDate = [NSDate date];
NSDate *fromDate = [NSString stringWithFormat:@"%@",[tempFormatter stringFromDate:currentDate]];
NSLog(@"currentDate %@", fromDate);

NSDate *toDate = [NSString stringWithFormat:@"%@",[tempFormatter stringFromDate:datePicker.date]];
NSLog(@"toDate %@", toDate);

NSTimeInterval interval = [toDate timeIntervalSinceDate:fromDate];
double leftDays = interval/86400;
NSLog(@"Total interval Between::%g",leftDays);

告诉我我做错了什么。是NSDate转换,我做得不好? 感谢。

4 个答案:

答案 0 :(得分:2)

你的代码搞砸了 - toDate和fromDate都是字符串而不是NSDates。你的日期应该是currentDate,你的toDate应该只是datePicker.date。转换为字符串或使用日期格式化程序来获取时间间隔时,您无需执行任何操作。

答案 1 :(得分:2)

此行正在产生问题。

 NSDate *toDate = [NSString stringWithFormat:@"%@",[tempFormatter stringFromDate:datePicker.date]];

它将toDate的类型从NSDate更改为__NSCFStringNSTimeInterval采用NSDate类型的两个参数,但在您的情况下只有fromDate是NSDate类型。

使用这些行更改您的代码

NSDate *currentDate = [NSDate date];
    NSDate *toDate = datePicker.date;
NSTimeInterval interval = [toDate timeIntervalSinceDate:currentDate];

肯定会有用(inshaAllah)。

答案 2 :(得分:1)

你当然是在正确的轨道上;但是,您似乎使用两个NSString调用“timeIntervalSinceDate”(即使您将fromDate和toDate指定为NSDates,请在此之后查看 - 您将这两个变量设置为NSString对象)。

要获得您正在寻找的间隔,请尝试:

[datePicker.date timeIntervalSinceDate:currentDate];

这应该让你得到正确的间隔。此外,您可能希望将leftDays更改为等于

double leftDays = abs(round(interval/86400));

这将使leftDays成为像-1.00005这样的尴尬数字。

答案 3 :(得分:1)

`将NSString传递给NSDate!这段代码错了

NSDate *curDate = [NSDate Date];
NSDate *pickerDate = datepicker.date;

然后使用NSTimeInterval

比较这两个日期