【问题标题】:Check if a date is between two days in iPhone检查日期是否在 iPhone 中的两天之间
【发布时间】:2012-09-18 04:07:22
【问题描述】:

我知道如何比较日期。在我的情况下,让 Date1 = 2011-10-14 & Date2 =2011-10-20 。我想检查 10 月 15 日是否在 Date1 和 Date2 之间。我正在使用以下代码:

if ( [date compare:Date1] == NSOrderedDescending && [date compare:Date2] == NSOrderedAscending) {   
            //write codes

        }

但这不会检查 10 月 15 日是否在 10 月 14 日和 10 月 20 日之间。而是检查整个日期。那么,我将如何实现这一点。 提前谢谢。

【问题讨论】:

  • 好吧,这在 10 月 14 日、15 日和 20 日有效...
  • 你可以把OR条件倒过来检查。
  • @Surya 要解释什么?为什么它不起作用?我没有看到问题。

标签: iphone ios nsdateformatter date-comparison


【解决方案1】:

希望以下代码对您有所帮助。假设你有 Date1 和 Date2,

NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger desiredComponents = (NSDayCalendarUnit | NSMonthCalendarUnit);


NSDateComponents *firstComponents = [calendar components:desiredComponents fromDate:Date1];
NSDateComponents *secondComponents = [calendar components:desiredComponents fromDate:Date2];

NSDate *firstWOYear = [calendar dateFromComponents:firstComponents];
NSDate *SecondWOYear = [calendar dateFromComponents:secondComponents];

NSComparisonResult result = [firstWOYear compare:SecondWOYear];
if (result == NSOrderedAscending) {
    //Date1 is before Date2
} else if (result == NSOrderedDescending) {
    //Date1 is after Date2
}  else {
    //Date1 is the same day/month as Date2
}

【讨论】:

    【解决方案2】:

    date1 = 2011-10-14 and date2 =2011-10-20 and date 是您要检查的日期。

    这样做

    if([date timeIntervalSince1970] >= [date1 timeIntervalSince1970] && [date timeIntervalSince1970] <= [date2 timeIntervalSince1970])
    {
        NSLog(@"%@ lies between and including %@ and %@",date,date1,date2);
       // if you just wanna check for between (not including) two dates just remove the equal signs above in condition check
    }
    else
        NSLog(@"%@ does not lie between %@ and %@",date,date1,date2);
    

    上面的代码将检查日期是否介于给定的两个极端日期之间(包括),但如果您只想检查(但不包括)极端日期之间,那么只需从 if 条件检查中删除等号。

    【讨论】:

      【解决方案3】:

      比较 ->

      NSString *dateString1 = @"2011-10-14";
      NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
      formatter.dateFormat = @"yyyy-MM-dd";
      
      NSDate *date1 = [formatter dateFromString:dateString1];
      
      NSString *dateString2 = @"2011-10-20";    
      NSDateFormatter *formatter2 = [[NSDateFormatter alloc]init];
      formatter2.dateFormat = @"yyyy-MM-dd";
      
      NSDate *date2 = [formatter2 dateFromString:dateString2];
      
      
      NSString *dateString3 = @"2011-10-15";
      NSDateFormatter *formatter3 = [[NSDateFormatter alloc]init];
      formatter3.dateFormat = @"yyyy-MM-dd";
      
      NSDate *date3 = [formatter3 dateFromString:dateString3];
      
      if ([date3 compare:date1] == NSOrderedDescending && [date3 compare:date2] == NSOrderedAscending) 
      {
          NSLog(@"%@ lies b/w %@ and %@",dateString3,dateString1,dateString2);
      }
      else
      {
          NSLog(@"Doesn't lie!");
      }
      

      【讨论】:

      • 是的!我已经阅读了您的问题,它将对您有所帮助!好的,现在我将准确地更新您想要的内容。 ....
      • @SuryaKant - 现在检查 - 我认为你可以自己做一点改变,但不知道你想要你的答案.....
      • 感谢您的时间任何方法我都这样做了..我的问题是知道 1996 年 10 月 10 日是否介于 oct 04 和 oct 15 之间。
      • 好的!我想念你的问题很抱歉..有很好的编码:)
      • 没关系..再次感谢您的努力,这将真正帮助其他人,以防他们想要比较两个日期..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2013-04-11
      相关资源
      最近更新 更多