Je travaille sur une application qui nécessite de vérifier la date d'échéance des devoirs. Je veux savoir si une date d'échéance est dans la semaine prochaine, et si c'est alors effectuer une action.
La plupart de la documentation que j'ai pu trouver est en Objective-C et je ne peux pas comprendre comment le faire dans Swift. Merci pour l'aide!!
153
Date
classe. Il est relié àNSDate
, mais il est appeléDate
.Réponses:
J'aime utiliser des extensions pour rendre le code plus lisible. Voici quelques extensions NSDate qui peuvent vous aider à nettoyer votre code et à le rendre facile à comprendre. Je mets ceci dans un fichier sharedCode.swift:
Maintenant, si vous pouvez faire quelque chose comme ça:
la source
return self.compare(dateToCompare) == NSComparisonResult.OrderedDescending
NSDateComponents
exister. Il y a beaucoup de cas extrêmes qui ne sont pas gérés correctement et cela n'a aucun sens de ne pas ajouter de conformitéComparable
àNSDate
. Je recommanderais d'utiliser la solution de John .date1 < date2
Si vous voulez soutenir
==
,<
,>
,<=
ou>=
pourNSDate
s, il vous suffit de déclarer quelque part:la source
Comparable
est un descendant duEquatable
protocole, vous ne devriez donc pas avoir besoin de déclarer la conformité aux deux.==
,<
,>
, etc., vous allez recevoir un résultat de la comparaison de leur adresse en mémoire, et non la comparaison de leur valeur réelle. Dans Swift, ils sont toujours traités comme des références, donc je pense que le choix était de (1) conserver les comparaisons par pointeur telles qu'elles sont dans ObjC, ou (2) d'éliminer la confusion en ne fournissant pas d'implémentation pour les comparaisons.Array.maxElement()
, etc. est alors automatiquement disponible des tableaux de NSDates.Voici comment vous comparez deux NSDates dans Swift, je viens de le tester dans le terrain de jeu de Xcode:
Donc, pour vérifier si une date
dueDate
est dans une semaine à partir de maintenant:la source
Je l'ai toujours fait en une seule ligne:
Toujours lisible dans le
if
blocla source
Dans Swift3, la
Date
structure dansFoundation
maintenant implémente leComparable
protocole. Ainsi, les précédentesNSDate
approches Swift2 sont remplacées par Swift3Date
.Remarque ...
Dans Swift3,
Date
c'eststruct
, cela signifie que c'est le casvalue type
.NSDate
c'estclass
, ça l'estreference type
.la source
la source
Si vous souhaitez comparer les dates avec la granularité (juste le même jour ou l'année, etc.) sur swift 3.
Pour les autres comparaisons de calendrier, remplacez .day par;
.année .mois .jour .heure .minute .seconde
la source
Swift implémente déjà la comparaison de date, utilisez simplement date1> date2 et ainsi de suite.
la source
dans Swift 3, la date est comparable afin que nous puissions comparer directement des dates telles que
Ou bien
meilleure façon de créer
extension
à la dateusage
let isGreater = date1.isGreater(than: date2)
la source
Cette fonction a fonctionné pour moi pour comparer si une date (startDate) était après la date de fin où les deux ont été définies comme des variables NSDate:
la source
mise en œuvre dans
Swift
la source
la source
dateAdded est une variable NSDate dans mon objet
la source
Nous avons un scénario pour vérifier les mensonges de l'heure actuelle b / w deux fois (deux dates) .Par exemple, je veux vérifier le mensonge actuel entre l'heure d'ouverture de la clinique (hôpital) et l'heure de fermeture.
Utilisez le code simple.
la source
Pour swift 3, vous pouvez utiliser la fonction ci-dessous pour comparer entre deux dates.
toGranularity peut être modifié en fonction des contraintes sur lesquelles vous souhaitez appliquer votre comparaison.
la source
Pour prolonger sur SashaZ
Swift iOS 8 et plus Lorsque vous avez besoin de plus que de simples comparaisons de dates plus grandes ou plus petites. Par exemple, est-ce le même jour ou la veille, ...
Remarque: n'oubliez jamais le fuseau horaire. Le fuseau horaire du calendrier a une valeur par défaut, mais si vous n'aimez pas la valeur par défaut, vous devez définir le fuseau horaire vous-même. Pour savoir de quel jour il s'agit, vous devez savoir dans quel fuseau horaire vous demandez.
Utilisez-le comme ceci:
D'un exemple plus complexe. Recherchez et filtrez toutes les dates dans un tableau, qui sont du même jour que "findThisDay":
la source