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

Dateclase. 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.OrderedDescendingNSDateComponentsexiste. Hay una gran cantidad de casos extremos que no están siendo adecuadamente mango y no tiene sentido de no añadir la conformidad conComparableaNSDate. Recomiendo usar la solución de John .date1 < date2Si quieres apoyar
==,<,>,<=, o>=paraNSDates, sólo tiene que declarar esto en alguna parte:fuente
Comparablees un descendiente delEquatableprotocolo, 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
dueDatees dentro de una semana a partir de ahora:fuente
Siempre lo hice en una línea:
Aún legible en el
ifbloquefuente
En Swift3, la
Dateestructura en elFoundationahora implementa elComparableprotocolo. Entonces, losNSDateenfoques anteriores de Swift2 son reemplazados por Swift3Date.Nota ...
En Swift3,
Dateesstruct, significa que lo esvalue type.NSDateesclass, 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
extensionen 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
Swiftfuente
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