2016-12-20 3 views
0

Я хочу проверить, есть ли текущий NSDate за 2 недели перед другим NSDate. Я могу сделать что-то вроде кода ниже, но задавался вопросом, есть ли какой-нибудь правильный способ.Рассчитать общее количество недель с двух NSDate

[calendar rangeOfUnit:NSCalendarUnitDay startDate:&currentDate interval:NULL forDate:currentDate]; 

[calendar rangeOfUnit:NSCalendarUnitDay startDate:&previousDate interval:NULL forDate:previousDate]; 

NSDateComponents *difference = [calendar components:NSCalendarUnitDay fromDate:previousDate toDate:currentDate options:0]; 

if(diiference >= 14) { 

} 

ответ

0

Вы можете использовать здесь один трюк. Сначала вычислите количество дней между двумя датами, а затем подсчитайте количество недель между ними. Вы можете сделать это, как

-(NSInteger)weeksBetweenDate:(NSDate*)fromDateTime andDate:(NSDate*)toDateTime { 
    NSDate *fromDate; 
    NSDate *toDate; 

    NSCalendar *calendar = [NSCalendar currentCalendar]; 

    [calendar rangeOfUnit:NSCalendarUnitDay startDate:&fromDate 
       interval:NULL forDate:fromDateTime]; 
    [calendar rangeOfUnit:NSCalendarUnitDay startDate:&toDate 
       interval:NULL forDate:toDateTime]; 

    NSDateComponents *difference = [calendar components:NSCalendarUnitDay 
               fromDate:fromDate toDate:toDate options:0]; 

    return [difference day]/7; 
} 

Вы можете использовать CGFloat, если вы хотите, чтобы получить недельное значение, как 1.5 и сохранить, как это, если вы хотите, количество недель, как 1,2,3, и т.д.

+0

Не это то же самое, что и набранный им? – Joshua

+0

Да, я могу это сделать, но я просто думаю, что яблоко не предоставляет, чтобы это выяснить? –

+0

yap @Joshua: D, но по-настоящему ценим усилия и нуждаемся в чем-то новом. –

0

Попробуйте это

Objective C

+ (NSInteger)daysBetweenDate:(NSDate*)fromDateTime andDate:(NSDate*)toDateTime 
{ 
NSDate *fromDate; 
NSDate *toDate; 

NSCalendar *calendar = [NSCalendar currentCalendar]; 

[calendar rangeOfUnit:NSCalendarUnitDay startDate:&fromDate 
    interval:NULL forDate:fromDateTime]; 
[calendar rangeOfUnit:NSCalendarUnitDay startDate:&toDate 
    interval:NULL forDate:toDateTime]; 

NSDateComponents *difference = [calendar components:NSCalendarUnitDay 
    fromDate:fromDate toDate:toDate options:0]; 

return [difference day]; 
} 

Свифт

extension NSDate { 
func numberOfDaysUntilDateTime(toDateTime: NSDate, inTimeZone timeZone: NSTimeZone? = nil) -> Int { 
let calendar = NSCalendar.currentCalendar() 
if let timeZone = timeZone { 
    calendar.timeZone = timeZone 
} 

var fromDate: NSDate?, toDate: NSDate? 

calendar.rangeOfUnit(.Day, startDate: &fromDate, interval: nil, forDate: self) 
calendar.rangeOfUnit(.Day, startDate: &toDate, interval: nil, forDate: toDateTime) 

let difference = calendar.components(.Day, fromDate: fromDate!, toDate: toDate!, options: []) 
return difference.day 
} 
} 
Смежные вопросы