【问题标题】:checking if date is between range检查日期是否在范围之间
【发布时间】:2013-02-22 21:49:19
【问题描述】:

我有一个使用 UICollectionView 的自定义日历设置,并且我有一个可以保存 30 天日期的数组。我想要做的是找出一个值是否在当前日期和它之前的 7 天之间。如果是我需要它做某事。我无法弄清楚我做错了什么。这是我目前所拥有的:

    NSDateFormatter *df = [NSDateFormatter new];
    [df setDateFormat:@"MM-dd-yy"];
    NSdate *date = [NSDate date];
    NSDate *newCurrentDate = [date dateByAddingTimeInterval:+14*24*60*60];
    NSDate *sevenDaysBeforeCurrent = [date dateByAddingTimeInterval:-7*24*60*60];




    if([[df stringFromDate:[days objectAtIndex:indexPath.item]] compare:[df stringFromDate:newCurrentDate]] == NSOrderedAscending && [[df stringFromDate:[days objectAtIndex:indexPath.item]] compare:[df stringFromDate:sevenDaysBeforeCurrent]] == NSOrderedDescending )
    {

            UIImage *buttonImage = [UIImage imageNamed:@"dates.png"];
            [myButton setBackgroundImage:buttonImage forState:UIControlStateNormal];

    }

它的作用是更改 newCurrentDate 之前的每个日期的图像,而不是仅更改前 7 个日期。任何人都可以看到我做错了什么吗?

数组的初始化如下:

myDays = [[NSMutableArray alloc] init];
    NSCalendar *cal = [NSCalendar autoupdatingCurrentCalendar];
    NSDate *today = [NSDate date];
    date = [NSDate date];




    for (int i = 0; i < 31; i++)
    {
        NSDateComponents *comps = [[NSDateComponents alloc]init];
        [comps setDay:i];
        [myDays addObject:[cal dateByAddingComponents:comps toDate:today options:0]];
    }

【问题讨论】:

  • 你为什么要创建字符串?你为什么不自己比较日期?
  • 我最初拥有它 [[days objectAtindex:indexPath.item] compare:date] 但它会发出警告,当我运行应用程序时会崩溃。
  • 那么你的数组中没有NSDates。
  • 我添加了数组的初始化。我认为这是将它们添加为日期,但我可能是错的。这可能是为什么在日期之间检查有问题吗?
  • 应该没问题,你从崩溃日志中得到的错误信息是什么?

标签: ios objective-c


【解决方案1】:

您不需要使用 dateFormatter。

if([dateInQuestion compare:newCurrentDate] == NSOrderedAscending && [dateInQuestion compare:sevenDaysBeforeCurrent] == NSOrderedDescending){
    // do something
}

【讨论】:

    【解决方案2】:

    尝试以下方法:

    NSDate *currentDate = [NSDate date];
    NSDate *dateSevenDaysPrior = [currentDate dateByAddingTimeInterval:-(7 * 24 * 60 * 60)];
    NSDate *someDate = [currentDate dateByAddingTimeInterval:-(3 * 24 * 60 * 60)]; // adjust as you like
    
    if (([dateSevenDaysPrior compare:someDate] != NSOrderedDescending) &&
        ([someDate compare:currentDate] != NSOrderedDescending))
    {
        NSLog(@"date is in range");
    }
    else
    {
        NSLog(@"date is not in range");
    }
    

    这假定您提供的内容(在此示例中代表 someDate)确实是 NSDate 的一个实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 2019-12-27
      相关资源
      最近更新 更多