Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 检查当前日期是否在两个给定日期之间_Iphone_Ios_Objective C_Nsdate_Nsdateformatter - Fatal编程技术网

Iphone 检查当前日期是否在两个给定日期之间

Iphone 检查当前日期是否在两个给定日期之间,iphone,ios,objective-c,nsdate,nsdateformatter,Iphone,Ios,Objective C,Nsdate,Nsdateformatter,我想检查当前日期是否在两个给定日期之间。我做以下几点 NSDate *now = [NSDate new]; NSLog(@"Now is %@",now); NSCalendar *myCalendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; NSDateComponents* components = [myCalendar components:NSYearCa

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

 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)
)

现在我已经创建了两个日期
Startdate1
endDate1
。为了检查当前日期是否介于我正在执行此操作的日期之间

NSComparisonResult result1 = [now compare:startDate1];
    NSComparisonResult result2 = [now compare:endDate1];
if (result2 == NSOrderedSame && result1 == NSOrderedSame ) {
        NSLog(@"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

您可以使用以下方法进行检查:

- (BOOL)yourDate:(NSDate *)date inRangeFirstDate:(NSDate *)startDate lastDate:(NSDate *)endDate {
   return [date compare:startDate] == NSOrderedDescending &&
          [date compare:endDate]  == NSOrderedAscending;
}
如果返回
YES
,则yourDate位于startDate和endDate之间,否则返回
NO


希望它能帮助你

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

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");

}
if (result1 == NSOrderedAscending && result2 == NSOrderedDescending)
是您应该编写的。

将代码更改为

if (result2 == NSOrderedDescending && result1 == NSOrderedAscending ) {
        NSLog(@"HELL YEAH! ");
    }
这可能会解决你的问题


快乐编码:)

您可以使用以下代码

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
}
NSTimeInterval fromTime=[startDate1 timeIntervalSinceReferenceDate];
NSTimeInterval toTime=[endDate1 timeIntervalSinceReferenceDate];
NSTimeInterval currTime=[[NSDate date]timeIntervalSinceReferenceDate];

如果(currTime>fromTime&&currTime检查我的答案:我刚才看了你的问题“检查当前日期是否在两个给定日期+iphone之间”。这是有效的。但我认为时区也有问题?我已经设置了小时数应该是5,但我得到了3???@StefGeelen
NSLog()
对时区一无所知-如果您想要正确的输出,您应该使用
NSDateFormatter
@Downvoter请说明对此答案进行向下投票的原因。