Comment vérifier si un NSDate
appartient à aujourd'hui?
J'avais l'habitude de le vérifier en utilisant les 10 premiers caractères de [aDate description]
. [[aDate description] substringToIndex:10]
renvoie une chaîne comme "YYYY-MM-DD"
celle-ci, j'ai comparé la chaîne avec la chaîne renvoyée par [[[NSDate date] description] substringToIndex:10]
.
Existe-t-il un moyen plus rapide et / ou plus efficace de vérifier?
Merci.
ios
objective-c
cocoa-touch
nsdate
nscalendar
Seunghoon
la source
la source
Réponses:
Dans macOS 10.9+ et iOS 8+, il existe une méthode sur NSCalendar / Calendar qui fait exactement cela!
Alors tu ferais simplement
Objectif c:
Swift 3:
la source
Vous pouvez comparer les composants de date:
Éditer:
J'aime plus la méthode de Stefan, je pense que cela donne une déclaration if plus propre et plus compréhensible:
Chris, j'ai incorporé votre suggestion. J'ai dû chercher quelle était l'époque, donc pour tous ceux qui ne le savent pas, cela fait la distinction entre la Colombie-Britannique et l'AD. Ceci est probablement inutile pour la plupart des gens, mais c'est facile à vérifier et ajoute une certaine certitude, donc je l'ai inclus. Si vous optez pour la vitesse, ce n'est probablement pas une bonne méthode de toute façon.
NOTEZ comme pour de nombreuses réponses sur SO, après 7 ans, c'est totalement dépassé. Dans Swift, utilisez simplement
.isDateInToday
la source
Ceci est une émanation de votre question, mais si vous souhaitez imprimer un NSDate avec "Aujourd'hui" ou "Hier", utilisez la fonction
pour NSDateFormatter
la source
J'essaierais de normaliser la date du jour à minuit et la deuxième date, de normaliser à minuit, puis de comparer s'il s'agit du même NSDate.
À partir d' un exemple Apple, voici comment vous normalisez la date d'aujourd'hui à minuit, faites de même pour la deuxième date et comparez:
la source
Travail Swift 3 et 4 l' extension de la suggestion faite par Catfish_Man:
la source
Pas besoin de jongler avec les composants, les époques et tout.
NSCalendar fournit une méthode pour obtenir le début d'une certaine unité de temps pour une date existante.
Ce code obtiendra le début d'aujourd'hui et une autre date et comparera cela. S'il évalue à
NSOrderedSame
, les deux dates sont le même jour - donc aujourd'hui.la source
A travaillé pour moi sur Swift 2.0
la source
Version Swift de la meilleure réponse:
la source
Reportez-vous à l'entrée de documentation d'Apple intitulée «Effectuer des calculs de calendrier» [lien] .
Le listing 13 sur cette page suggère que pour déterminer le nombre de minuit entre les jours, vous utilisez:
Vous pouvez ensuite déterminer si deux jours sont identiques en utilisant cette méthode et voir si elle renvoie 0 ou non.
la source
Vous pouvez également vérifier l'intervalle de temps entre la date que vous avez et la date actuelle:
Cela vous donnera l'intervalle de temps, en secondes, entre maDate et la date / heure actuelle.
Lien .
Edit: Note à tout le monde: je suis bien conscient que [myDate timeIntervalSinceNow] ne détermine pas sans ambiguïté si myDate est aujourd'hui.
Je laisse cette réponse telle quelle pour que si quelqu'un cherche quelque chose de similaire et que [myDate timeIntervalSinceNow] est utile, il peut le trouver ici.
la source
timeIntervalSinceNow
car il est couvert dans de nombreux autres articles. La gestion de la comparaison des jours avec la vérification des secondes encourage également la division sujette aux erreurs par 86400.Extension Swift basée sur les meilleures réponses:
la source
Si vous avez beaucoup de ces comparaisons de dates, les appels à
calendar:components:fromDate
commencer prennent beaucoup de temps. Selon certains profils que j'ai réalisés, ils semblent être assez chers.Supposons que vous essayez de déterminer lesquelles parmi une série de dates, disons
NSArray *datesToCompare
, sont le même jour qu'un jour donné, par exempleNSDate *baseDate
, vous pouvez utiliser quelque chose comme ce qui suit (partiellement adapté d'une réponse ci-dessus):Production:
la source
Il existe un moyen plus simple que la plupart des réponses ci-dessus!
la source
Cela pourrait probablement être retravaillé en tant que catégorie NSDate, mais j'ai utilisé:
(Cependant, comparer les deux chaînes de date comme dans la question d'origine semble presque `` plus propre ''.)
la source
comps
lorsque vous les mettez immédiatement à zéro? De plus, je pense que vous devez inclure l'époque.pour iOS7 et versions antérieures:
la source
Vérifiez nos excellents Erica Sadun
NSDate extension
. Très simple à utiliser. Très bien ici:http://github.com/erica/NSDate-Extensions
Il est déjà là dans ce post: https://stackoverflow.com/a/4052798/362310
la source
La solution correcte et sûre sans déballage forcé, fonctionnant sur Swift 2.2 et avant iOS 8:
la source
Voici ma réponse de 2 centimes basée sur la réponse acceptée mais prenant également en charge la nouvelle API. Remarque: j'utilise le calendrier grégorien car la plupart des horodatages sont GMT mais modifiez le vôtre comme bon vous semble
la source
Ma solution est de calculer le nombre de jours écoulés depuis 1970 par division et de comparer la partie entière
la source
la source