2014-10-21 3 views
-1

Я пытаюсь проверить, есть ли 2 даты и времени между текущим временем. Я сделал эту функцию для этого. Вот функцияNSDateComponents - установить компоненты буднего дня

-(BOOL)getStartHour:(NSInteger)startHour getStartMin:(NSInteger)startMin getEndHour: 

(NSInteger)endHour getEndMin:(NSInteger)endMin { 
    NSDate *now = [NSDate date]; 
    NSDate *startOfToday; 
    [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&startOfToday interval:NULL forDate:now]; 


    NSDateComponents *startComps = [[NSDateComponents alloc] init]; 
    startComps.weekday = 1; 
    startComps.hour = startHour; 
    startComps.minute = startMin; 
// 
    NSDateComponents *endComps = [[NSDateComponents alloc] init]; 
    endComps.hour = endHour; 
    endComps.minute = endMin; 
    endComps.weekday = 3; 

    NSDate *startDate = [[NSCalendar currentCalendar] dateByAddingComponents:startComps toDate:startOfToday options:0]; 
    NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:endComps toDate:startOfToday options:0]; 
    NSLog(@"%d", [startComps weekday]); 
// NSLog(@"%@", startDate); 
// NSLog(@"%@", now); 

    if ([startDate timeIntervalSince1970] < [now timeIntervalSince1970] && [now timeIntervalSince1970] < [endDate timeIntervalSince1970]) { 
     return YES; 
    } 
    else return NO; 
} 

Когда я вхожу [startComps будний день] он записывает, 0. Но сегодня вторник, который не имеет никакого смысла для меня. Я хочу проверить, существует ли эта дата между понедельником и днем ​​среды, которую я бы предположил как 1 - 3 или 0 - 2. Но почему она регистрируется сегодня (вторник) как 0?

Другими словами, я ищу dayOfWeek как целое число. SO понедельник - 1, вторник 2 и т. Д.

Thakns за помощью.

+0

Просто уточнить: вы пытаетесь определить, если текущая дата находится между двумя другими датами? Если да, почему бы не использовать 'compare:' или некоторые простые математические данные на временном интервале? – Droppy

+0

@ Droppy да, я сравниваю много (например, 50) дат/времени, например, я хочу знать, если его понедельник (день 1) или вторник (день 2), и это между 7 утра и 6 вечера –

+0

Я не думаю имеет смысл добавить будние дни в dateByAddingComponents. Вы должны добавлять простые старые дни. И если вы читаете спецификацию, 'weekday' начинается с 1 воскресенья. –

ответ

0
if ([startDate timeIntervalSince1970] < [now timeIntervalSince1970] && [now timeIntervalSince1970] < [endDate timeIntervalSince1970]) { 
     return YES; 
    } 
    else return NO; 

И затем вернуть его изо дня в день,

поэтому добавьте в, если заявление

if weekday < day and day < weekend 
return yes 
-1

+ (BOOL) isDate: (NSDate *) date fromStartDate: (NSDate *) startDate andEndDate: (NSDate *) endDate {if ((([startDate compare: date] == NSOrderedAscending || [startDate compare: date ] == NSOrderedSame)) & & ([endDate compare: date] == NSOrderedDescending || [endDate compare: date] == NSOrderedSame)) {return YES; } return NO; }

0

Просто подумайте: вы не можете добавить «вторник» к дате «сейчас». Что это значит? Следующий вторник? последний вторник? или если во вторник вторник добавляется вторник, в результате чего в четверг в регионах, где вторник - второй день недели, или в пятницу, где на третий день?

Таким образом, он регистрирует 0, поскольку на самом деле 0 ничего не стоит в этом случае. 1 воскресенье, 2 понедельник ... 6 суббота.

Смежные вопросы