Estoy trabajando en una aplicación que requiere verificar la fecha de vencimiento de la tarea. Quiero saber si una fecha de vencimiento es dentro de la próxima semana, y si es así, realice una acción.
La mayor parte de la documentación que pude encontrar está en Objective-C y no puedo entender cómo hacerlo en Swift. ¡¡Gracias por la ayuda!!
153
Date
clase. Tiene un puenteNSDate
, pero se llamaDate
.Respuestas:
Me gusta usar extensiones para hacer que el código sea más legible. Aquí hay algunas extensiones NSDate que pueden ayudarlo a limpiar su código y facilitar su comprensión. Puse esto en un archivo sharedCode.swift:
Ahora si puedes hacer algo como esto:
fuente
return self.compare(dateToCompare) == NSComparisonResult.OrderedDescending
NSDateComponents
existe. Hay una gran cantidad de casos extremos que no están siendo adecuadamente mango y no tiene sentido de no añadir la conformidad conComparable
aNSDate
. Recomiendo usar la solución de John .date1 < date2
Si quieres apoyar
==
,<
,>
,<=
, o>=
paraNSDate
s, sólo tiene que declarar esto en alguna parte:fuente
Comparable
es un descendiente delEquatable
protocolo, por lo que no debería tener que declarar conformidad con ambos.==
,<
,>
, etc, que voy a recibir un resultado de la comparación de su dirección en la memoria, no la comparación de su valor real. En Swift, todavía se tratan como referencias, por lo que creo que la elección fue (1) mantener las comparaciones por puntero como están en ObjC, o (2) eliminar la confusión al no proporcionar una implementación para las comparaciones.Array.maxElement()
, etc., está disponible automáticamente de las matrices de NSDates.Así es como se comparan dos NSDates en Swift, acabo de probarlo en el patio de juegos de Xcode:
Para verificar si una fecha
dueDate
es dentro de una semana a partir de ahora:fuente
Siempre lo hice en una línea:
Aún legible en el
if
bloquefuente
En Swift3, la
Date
estructura en elFoundation
ahora implementa elComparable
protocolo. Entonces, losNSDate
enfoques anteriores de Swift2 son reemplazados por Swift3Date
.Nota ...
En Swift3,
Date
esstruct
, significa que lo esvalue type
.NSDate
esclass
, lo esreference type
.fuente
fuente
Si desea comparar fechas con granularidad (solo el mismo día o año, etc.) en swift 3.
Para otras comparaciones de calendario, cambie .day a;
.año .mes .día .hora .minuto .segundo
fuente
Swift ya implementa la comparación de fechas, solo usa date1> date2 y así sucesivamente.
fuente
en Swift 3, Date es comparable para que podamos comparar fechas directamente como
o alternativamente
mejor forma de crear
extension
en Fechauso
let isGreater = date1.isGreater(than: date2)
fuente
Esta función me funcionó para comparar si una fecha (startDate) fue posterior a endDate donde ambas se definieron como variables NSDate:
fuente
implementación en
Swift
fuente
fuente
dateAdded es una variable NSDate en mi objeto
fuente
Tenemos un escenario para verificar las mentiras de la hora actual b / n dos veces (dos fechas). Por ejemplo, quiero verificar la mentira actual entre la hora de apertura de la clínica (Hospital) y la hora de cierre.
Usa el código simple.
fuente
Para swift 3, puede usar la siguiente función para comparar entre dos fechas.
toGranularity se puede cambiar de acuerdo con las restricciones a las que desea aplicar su comparación.
fuente
Extender sobre SashaZ
Swift iOS 8 y superior Cuando necesite más que simplemente comparaciones de fechas más grandes o más pequeñas. Por ejemplo, es el mismo día o el día anterior, ...
Nota: Nunca olvides la zona horaria. La zona horaria del calendario tiene un valor predeterminado, pero si no le gusta el valor predeterminado, debe configurar la zona horaria usted mismo. Para saber qué día es, debe saber en qué zona horaria está preguntando.
Úselo así:
De un ejemplo más complejo. Busque y filtre todas las fechas en una matriz, que son del mismo día que "findThisDay":
fuente