2011-08-22 7 views
14

Je prends deux NSDates en utilisant le sélecteur de date et heure. Maintenant, je veux compter le nombre de jours entre ces deux NSDates. Comment puis-je trouver la différence entre deux NSDates.Différence entre deux NSDates

s'il vous plaît donnez-moi une solution.

Merci beaucoup.

+0

double possible de [Nombre de jours entre deux NSDates] (http://stackoverflow.com/questions/4739483/number-of-days-between-two-nsdates) –

Répondre

24

référence NSDate est un petit document: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate 

est ce que vous cherchez si vous voulez différence de temps d'intervalle.

Pour les jours (ne pas tous les jours a même nombre de minutes, heures) vous voulez voir Martins réponse ci-dessous et utilisez NSDateComponents avec [NSCalendar currentCalendar]

+0

Chaque jour n'a pas le même nombre d'heures ??? Je pensais que tous les jours a 24 heures? Pouvez-vous expliquer comment c'est ainsi? – GeneCode

+0

La terre ne tourne pas uniformément, certains jours peuvent être plus longs que d'autres. –

53

Voici un petit bijou pour vous - avec plus de quelques jours :

// Assuming you have fistDate and secondDate 

unsigned int unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitDay | NSCalendarUnitMonth; 

NSDateComponents *conversionInfo = [currCalendar components:unitFlags fromDate:fistDate toDate:secondDate options:0]; 

int months = [conversionInfo month]; 
int days = [conversionInfo day]; 
int hours = [conversionInfo hour]; 
int minutes = [conversionInfo minute]; 

Ceci est très utile - en particulier lors du formatage chaîne telle que:

[NSString stringWithFormat:@"%d months , %d days, %d hours, %d min", months, days, hours, minutes]; 

Bonne programmation :)

+8

+1 c'est la bonne façon de le faire. –

+0

@Dave DeLong Oui, c'est dommage que les gens se contentent de jouer à la dure avec des chars et des ints pour de telles choses. – martin

+0

Et? que devrions-nous faire avec firstDate et secondDate? – Gargo

1

Voici une mise en œuvre rapide (je l'utilise tout le temps pendant le débogage des choses comme les requêtes réseau et JSON): analyse syntaxique

let date1 = NSDate() 

// do some long running task 

let date2 = NSDate() 
print(date2.timeIntervalSinceDate(date1)) 

// you can also do this in one line, of course: 
print(NSDate().timeIntervalSinceDate(date1))