如何检查日期是否在目标C中设置年份的范围内

时间:2011-12-12 17:25:15

标签: iphone ios nsdate

有没有办法检查NSDate对象是否在月份范围内而没有设置范围内的年份。例如,我有1956年2月2日的NSDate eqaual,我想知道该日期是否在任何一年的1月10日到2月10日之间。

提前谢谢!

4 个答案:

答案 0 :(得分:1)

使用NSCalendarNSDateComponents

e.g。

// Assuming 'data' is a valid NSDate object
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSMonthCalendarUnit+NSDayCalendarUnit fromDate:date];
NSInteger day = components.day;
NSInteger month = components.month;
if ( (month>=startMonth && month<=endMonth) && (day>=startMonthDay && day<=endMonthDay)) {
// do your stuff
}

答案 1 :(得分:1)

您应该使用NSDate-compare消息,或使用-timeIntervalSince1970

NSDate *startRange;
NSDate *endRange;

// method one
if (([myDate compare:startRange] > 0) &&  ([myDate compare:endRange] < 0))
{
    // execute code here
}

// method two
if (myDate.timeIntervalSince1970 > startRange.timeIntervalSince1970 && 
    myDate.timeIntervalSince1970 < endRange.timeIntervalSince1970)
{
     // execute code here
}

答案 2 :(得分:0)

您可以获取当前的NSCalendar实例并使用组件:forDate:方法,然后从生成的NSDateComponents对象中提取月份和日期组件。

答案 3 :(得分:0)

您可以将NSDateComponents用于此

    NSDate *date = [NSDate date];
    // setting units we would like to use in future
    unsigned units = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSWeekdayCalendarUnit;
    // creating NSCalendar object
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    // extracting components from date
    NSDateComponents *components = [calendar components:units fromDate:date];

    if (components.month <= 2 && components.month >= 1) {
         if (components.month == 2) {
                if (components.day <= 10) {
                       // Date is in range
                }
         } else if (components.month == 2) {
                if (components.day >= 10) {
                       // Date is in range
         }
    }