2013-05-21 136 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 
} 
相關問題