2013-05-21 134 views
-1

我想检查当前日期是否在两个给定日期之间。我做了以下工作检查当前日期是否在两个给定日期之间

NSDate *now = [NSDate new]; 
    NSLog(@"Now is %@",now); 
    NSCalendar *myCalendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; 
    NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:[NSDate date]]; 
    [components setYear:2013]; 
    [components setMonth:06]; 
    [components setDay:28]; 
    [components setHour:5]; 
    [components setMinute:00]; 
    NSDate *startDate1 = [myCalendar dateFromComponents:components]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    formatter.timeZone = [NSTimeZone localTimeZone]; 
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; 
    NSLog(@"start dateeee is %@",startDate1); 

    NSDateComponents* components2 = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:[NSDate date]]; 
    [components2 setYear:2013]; 
    [components2 setMonth:06]; 
    [components2 setDay:29]; 
    [components2 setHour:4]; 
    [components2 setMinute:59]; 

    NSDate *endDate1 = [myCalendar dateFromComponents:components]; 
    NSLog(@"end date is %@",endDate1) 

;

现在我已经创建了2个日期Startdate1endDate1。为了检查当前日期是否在这些日期之间,我正在执行此操作。

NSComparisonResult result1 = [now compare:startDate1]; 
    NSComparisonResult result2 = [now compare:endDate1]; 
if (result2 == NSOrderedSame && result1 == NSOrderedSame) { 
     NSLog(@"HELL YEAH! "); 
    } 

但我从来没有得到一个HELL YEAH?

注意:我已将iPhone日期时间设置为开始日期和结束日期之间的时间。而且,这里是我的日志:

2013-06-29 11:11:48.727 Genk on stage[2205:907] Now is 2013-06-29 09:11:48 +0000 
2013-06-29 11:11:48.728 Genk on stage[2205:907] start dateeee is 2013-06-28 03:00:00 +0000 
2013-06-29 11:11:48.729 Genk on stage[2205:907] end date is 2013-06-28 03:00:00 +0000 
+0

检查我的答案在这里:http://stackoverflow.com/questions/16520676/wrong-date-comes-back-from-nsdatecomponents/16526286#16526286 –

+0

我只是瞪大眼睛你的问题“检查当前日期为在两个给定的日期+ iphone之间“。 – rptwsthi

回答

-1

您可以使用此检查:

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

如果返回YES然后yourDate在于起始日期和结束日期,否则返回NO之间。

希望它可以帮助你

+0

@Downvoter请提及downvote这个答案的原因。 –

-1
NSDate * now;..... 
NSDate * endDate1;...... 

if ([now compare: endDate1] == NSOrderedDescending) { 
    NSLog(@"now is later than endDate1");   

} else if ([now compare: endDate1] == NSOrderedAscending) { 
    NSLog(@"now is earlier than endDate1"); 

} else { 
    NSLog(@"dates are the same"); 

} 
0

你的逻辑是有缺陷的。返回值NSOrderedSame表示比较的两个值相等。这不是你想要的。相反,你要检查,如果第一个日期在当前日期之前,第二个来后:

if (result1 == NSOrderedAscending && result2 == NSOrderedDescending) 

是你应该写什么。

+0

这工作。但我认为时区也出现了问题?我已经确定小时应该是5,但我得到3? – Steaphann

+1

@StefGeelen'NSLog()'不知道任何时区 - 如果你想要正确的输出,你应该使用'NSDateFormatter'。 – 2013-05-21 09:32:51

0

改变你的代码

if (result2 == NSOrderedDescending && result1 == NSOrderedAscending) { 
     NSLog(@"HELL YEAH! "); 
    } 

这可能会解决你的问题

编码愉快:)

-1

您可以使用下面的代码。

NSTimeInterval fromTime = [startDate1 timeIntervalSinceReferenceDate]; 
NSTimeInterval toTime = [endDate1 timeIntervalSinceReferenceDate]; 
NSTimeInterval currTime = [[NSDate date] timeIntervalSinceReferenceDate]; 
if(currTime>fromTime && currTime<toTime) 
{ 
     //current time lies between the two dates 
} 
相关问题