NSDateComponents : 查找超过 30 天

Posted

技术标签:

【中文标题】NSDateComponents : 查找超过 30 天【英文标题】:NSDateComponents : Find older than 30 days 【发布时间】:2015-06-29 09:12:48 【问题描述】:

使用NSDateComponents我想比较出发日期和现在,看看出发日期是否> 30天。

我使用NSDateComponents 功能,但在调试它时,当我预计它是 3 天、15 天或其他任何时间时,它总是像一个非常大的数字。

   NSDate* now = [NSDate date];

    NSUInteger unitFlags = NSDayCalendarUnit;
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [calendar components:unitFlags fromDate:departureDate toDate:now options:0];

    NSInteger age = [components day]+1;

当我尝试记录年龄时

NSLog(@"age (in days) = %lu", (long) age);

它返回一个很长的数字,例如18446744073709551613

我想做一个 if 语句:

if (age > 30) 但当返回的年龄是这样的长数字时,我不确定如何执行此操作。

非常感谢

【问题讨论】:

你登录departureDatenow了吗?我认为[components day] 也应该是负数,因为我猜departureDate 晚于now。所以你的测试> 30 不应该正确触发。 NSLog(@"age") 记录age,而不是名为age 的变量的内容。请向我们展示真实的日志记录代码。 你是对的,NSLog 年龄不记录年龄。我更新了问题 【参考方案1】:
NSDate * dateNotFormatted = [NSDate date];
double now = [dateNotFormatted timeIntervalSince1970];
NSLog(@"%f",now);

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSDate * dateDepareture =[dateFormatter dateFromString:@"29-06-2015"];
double dateDept = [dateDepareture timeIntervalSince1970];
NSLog(@"%f",dateDept);

检查 30 天的双值...

NSDateComponents *components;
NSInteger days;

components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay fromDate:[NSDate date] toDate:[dateFormatter dateFromString:@"2-07-2015"] options:0];
days = [components day];
NSLog(@"%ld",(long)days);

将代码更改为您需要检查 30 天...

NSDayCalendarUnit NS_CALENDAR_ENUM_DEPRECATED(10_4, 10_10, 2_0, 8_0, "改用 NSCalendarUnitDay") = NSCalendarUnitDay

【讨论】:

我是否需要添加days = ([components day] + 1); 我对正好是 30 天前的时间戳进行了测试,结果是 29 天而不是 30 天【参考方案2】:
NSDate* date30 = [NSDate date];
date30 = [date dateByAddingInterval:86400*30]; 

if([departureDate compare:date30] == NSOrderedDescending)
    //Departure > Today + 30d
    
else

    //Departure < Today + 30d

这是你需要的吗?

【讨论】:

以上是关于NSDateComponents : 查找超过 30 天的主要内容,如果未能解决你的问题,请参考以下文章

iOS 3.1 上的 NSDateComponents setTimeZone NSInvalidArgumentException

如何在两个 NSDateComponents 之间获取 NSDateComponents?

将 NSDateComponents 与整数进行比较(或将 NSDateComponents 转换为整数)

2 NSDateComponents - 是同一周吗?

NSDateComponents 返回意外结果

NSDateComponents