【问题标题】:Check if today's date falls in between start date and end date [duplicate]检查今天的日期是否在开始日期和结束日期之间[重复]
【发布时间】:2013-05-16 07:08:50
【问题描述】:

当前日期不应早于开始日期结束日期,但可以等于开始日期结束日期

我应该如何修改代码?

for(AllBookings *book in bookarray)
{

    NSString *startdte = book.StartDate; //taking start date from array
    NSString *enddte = book.EndDate;
    NSDate *start = [self getDateFromJSON:startdte];
    NSDate *end = [self getDateFromJSON:enddte];
    NSDate *now = [NSDate date];

    NSTimeInterval fromTime = [start timeIntervalSinceReferenceDate];
    NSTimeInterval toTime = [end timeIntervalSinceReferenceDate];
    NSTimeInterval currTime = [[NSDate date] timeIntervalSinceReferenceDate];

    if((fromTime<currTime) && (toTime>=currTime))//checking if currnt is in btw strt n end
    {
        success = TRUE;
        break;

    }
    else {
        success = FALSE;
    }

}

【问题讨论】:

标签: ios objective-c


【解决方案1】:

以下是我在应用程序中使用的工作代码,我已根据您的要求进行了更改:

 -(void)isSuitableTime{
  NSDateFormatter *df = [[NSDateFormatter alloc] init];
  [df setDateFormat:@"HH:mm"];

   NSDate *currentTime = [NSDate date];
   NSString *currentTimeString = [df stringFromDate: currentTime];

   NSDate *gpsTimeCurrent= [df dateFromString:currentTimeString];
   NSDate *gpsTimeFrom = [df dateFromString:@"09:00" ];
   NSDate *gpsTimeTo = [df dateFromString:@"17:00"];

   NSTimeInterval intervalFromTimeToCurrent = 
             [gpsTimeCurrent timeIntervalSinceDate:gpsTimeFrom];

   NSTimeInterval intervalCurrentToTimeTo = 
                 [gpsTimeTo timeIntervalSinceDate:gpsTimeCurrent];

   NSLog(@"intervalToTimeToCurrent is %f",intervalCurrentToTimeTo);

   if ((intervalFromTimeToCurrent>0) && (intervalCurrentToTimeTo >0)) {
                NSLog(@"In my time range");
    } 
    else {
    NSLog(@"Out of my time range");
    }

 }

【讨论】:

    【解决方案2】:

    使用此方法伴侣

    - (BOOL)isDate:(NSDate *)date inRangeFirstDate:(NSDate *)firstDate lastDate:(NSDate *)lastDate {
           return [date compare:firstDate] == NSOrderedDescending && [date compare:lastDate]  == NSOrderedAscending;
    }
    

    【讨论】:

      【解决方案3】:

      使用 NSDate 的 compare: 方法而不是 if (current &gt; fromTime)

      From the class reference:
      
      If:
      The receiver and anotherDate are exactly equal to each other, NSOrderedSame.
      The receiver is later in time than anotherDate, NSOrderedDescending.
      The receiver is earlier in time than anotherDate, NSOrderedAscending.
      
      
      you can use
      
      if([current compare: From] == NSOrderedDescending||NSOrderedSame
         && [current compare: Totime]== NSOrderedAescending||NSOrderedSame)
      {
        // Current is between to and From 
      }
      

      【讨论】:

        猜你喜欢
        • 2015-05-04
        • 1970-01-01
        • 1970-01-01
        • 2018-06-13
        • 1970-01-01
        • 1970-01-01
        • 2018-11-20
        • 1970-01-01
        • 2016-04-17
        相关资源
        最近更新 更多