Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.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
如何在iOS中检查一天是否介于其他两天之间。。。?_Ios_Objective C_Nsdateformatter_Nsdatecomponents - Fatal编程技术网

如何在iOS中检查一天是否介于其他两天之间。。。?

如何在iOS中检查一天是否介于其他两天之间。。。?,ios,objective-c,nsdateformatter,nsdatecomponents,Ios,Objective C,Nsdateformatter,Nsdatecomponents,我有一个日期组件,比如birthdayComponent,它包含月份和日期,我想检查它是否介于其他组件之间。。说出beginDaYComponent和endDayComponent 我想检查我的生日组件是否在这两个日期之间。。?我怎样才能做到这一点,因为我还必须考虑边界情况下说,2月29日,我将有终端值为每月3和1天。您可以查看下面的代码以了解更多信息 NSDateFormatter *dateFormat = [NSDateFormatter new]; [dateFormat se

我有一个日期组件,比如birthdayComponent,它包含月份和日期,我想检查它是否介于其他组件之间。。说出beginDaYComponent和endDayComponent

我想检查我的生日组件是否在这两个日期之间。。?我怎样才能做到这一点,因为我还必须考虑边界情况下说,2月29日,我将有终端值为每月3和1天。您可以查看下面的代码以了解更多信息

 NSDateFormatter *dateFormat = [NSDateFormatter new];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];

    NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
    NSDateComponents *beginDayComponent = [[NSDateComponents alloc] init];
    NSDateComponents *endDayComponent = [[NSDateComponents alloc] init];

    NSCalendar *theCalendar = [NSCalendar currentCalendar];
    NSMutableArray* birthdayFitlerArray = [NSMutableArray new];

    for (NSString* dateString in birthdaysArray)
    {
        NSDate* birthdayDate = [dateFormat dateFromString:dateString];

        dayComponent.day = -1;
        NSDate* beginDate = [theCalendar dateByAddingComponents:dayComponent toDate:currentLeg.date options:0];

        dayComponent.day = 1;
        NSDate* endDate = [theCalendar dateByAddingComponents:dayComponent toDate:currentLeg.date options:0];

        beginDayComponent = [theCalendar  components:(NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:beginDate];
        endDayComponent = [theCalendar  components:(NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:endDate];

        NSDateComponents* birthdayComponents = [theCalendar  components:(NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:birthdayDate];

}
更新:


我想省略日期的年份部分。

创建两个NSDate对象,用作上限和下限

然后使用NSDate的比较方法查看您的日期是否在这两个日期之间。您需要使用比较方法两次。退房:

接收者和另一个日期完全相等,即DeredName 接收器的时间晚于另一个日期,因此取消接收 接收器在时间上早于另一个日期,因此被取消接收。 我认为从这里开始很简单:

NSDate *startDate = …;
NSDate *endDate = …;   // make sure endDate is later than startDate
NStimeInterVal endInterval;

[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&startDate interval:NULL forDate:startDate];
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&endDate interval:&endInterval forDate:endDate];
endDate = [endDate dateByAddingTimeInterval:endInterval-0.001];
这将在默认时区中创建时间0:00的开始日期和23:59:59.999的结束日期

现在使用比较法

if ([givenDate compare:startDate] == NSOrderedAscending){
     //date is before both dates
} else if ([givenDate compare:endDate] == NSOrderedDescending){
    // date lies after both dates
} else {
 //givenDate lies between both dates.
}
很明显,你想检查它的任何一年。只需将yer设置为一年(如1),以便对所有涉及的日期进行比较

NSDateComponents *comps = [aCalendar components:(NSUIntegerMax - NSYearCalendarUnit ) fromDate:date];
comps.year = 1;
NSDate *year1Date = [aCalendar dateFromComponents:comps];

很简单。您可以使用NSDate的laterDate:方法,也可以同时使用earlierDate:和laterDate:。请阅读有关这些方法的说明

// 1. 
NSDate *firstDate, *secondDate, *thirdDate;

if ([firstDate laterDate:secondDate] == secondDate &&
    [secondDate laterDate:thirdDate] == thirdDate)
{
    /// secondDate is between first and third date.
}

// 2.
if ([secondDate earlierDate:firstDate] == firstDate &&
    [secondDate laterDate:thirdDate] == thirdDate)
{
    /// secondDate is between first and third date.
}

这里的问题是,它还将比较日期的年份部分。。我不想比较,因为我只需要检查生日是否在两个日期之间。你为什么不把它们都设为今年呢?谢谢。。这就是我最后做的。快速谷歌搜索:比较没有年份的nsdate和@MarekR:close,但不一样。那是没有时间部分的。
NSDate *startDate = …;
NSDate *endDate = …;   // make sure endDate is later than startDate
NStimeInterVal endInterval;

NSDateComponents *comps = [aCalendar components:(NSUIntegerMax - NSYearCalendarUnit ) fromDate:startDate];
comps.year = 1;
NSDate *year1StartDate = [aCalendar dateFromComponents:comps];

comps = [aCalendar components:(NSUIntegerMax - NSYearCalendarUnit ) fromDate:endDate];
comps.year = 1;
NSDate *year1EndDate = [aCalendar dateFromComponents:comps];

comps = [aCalendar components:(NSUIntegerMax - NSYearCalendarUnit ) fromDate:givenDate];
comps.year = 1;
NSDate *year1givenDate = [aCalendar dateFromComponents:comps];


[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&year1StartDate interval:NULL forDate:year1StartDate;
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&endDate interval:&endInterval forDate:endDate];
endDate = [endDate dateByAddingTimeInterval:endInterval-0.001];

if ([year1givenDate compare:year1StartDate] == NSOrderedAscending){
     //date is before both dates
} else if ([year1givenDate compare:year1EndDate] == NSOrderedDescending){
    // date lies after both dates
} else {
 //givenDate lies between both dates.
}
// 1. 
NSDate *firstDate, *secondDate, *thirdDate;

if ([firstDate laterDate:secondDate] == secondDate &&
    [secondDate laterDate:thirdDate] == thirdDate)
{
    /// secondDate is between first and third date.
}

// 2.
if ([secondDate earlierDate:firstDate] == firstDate &&
    [secondDate laterDate:thirdDate] == thirdDate)
{
    /// secondDate is between first and third date.
}