Estoy actualizando mi aplicación a la sintaxis Swift 3.0 (sé que todavía está en versión beta, pero quiero estar preparado tan pronto como se publique).
Hasta que la Beta previa de Xcode (Beta 5) que era capaz de comparar dos Date
objetos usando los operandos <
, >
y ==
. Pero en la última versión beta (Beta 6) esto ya no funciona. A continuación se muestran algunas capturas de pantalla:
Como puede ver en ambas capturas de pantalla, estos son dos Date
objetos. Pero obtengo el siguiente error:
¿Qué estoy haciendo mal? Las funciones todavía están declaradas en la Date
clase:
static func >(Date, Date)
Devuelve verdadero si la fecha de la izquierda es posterior en el tiempo que la fecha de la derecha.
¿Es esto solo un error Beta o estoy haciendo algo mal?
let d1 = Date() ; let d2 = Date() ; if d1 > d2 { }
funciona en mi Xcode 8 beta 6.Respuestas:
Probé este fragmento (en Xcode 8 Beta 6) y está funcionando bien.
fuente
2019-05-14 12:08:14 +0000
==2019-05-14
debería devolver verdadero. y que ?Date
esComparable
&Equatable
(a partir de Swift 3)Esta respuesta complementa la respuesta de @Ankit Thakur.
Desde Swift 3, la
Date
estructura (basada en laNSDate
clase subyacente ) adopta los protocolosComparable
yEquatable
.Comparable
requiere queDate
implementan los operadores:<
,<=
,>
,>=
.Equatable
Requiere queDate
implemente el==
operador.Equatable
permiteDate
utilizar la implementación predeterminada del!=
operador (que es la inversa de laEquatable
==
implementación del operador).El siguiente código de muestra ejercita estos operadores de comparación y confirma qué comparaciones son verdaderas con
print
declaraciones.Función de comparación
Uso de muestra
fuente
de Swift 3 y superior, la fecha es comparable, por lo que podemos comparar directamente fechas como
Alternativamente, podemos crear una extensión en la fecha
Utilizar:
let isEqual = date1.isEqualTo(date2)
fuente
2019-05-14 12:08:14 +0000
==2019-05-14
debería devolver verdadero. y que ?Mira esto http://iswift.org/cookbook/compare-2-dates
Obtener fechas:
Uso de la instrucción SWITCH
usando la instrucción IF
fuente
Para mí, el problema era que tenía mi propia extensión para la clase Date que definía todos los operadores de comparación. Ahora (desde swift 3) que Date es comparable, estas extensiones no son necesarias. Así que los comenté y funcionó.
fuente
SWIFT 3: No sé si esto es lo que estás buscando. Pero comparo una cadena con una marca de tiempo actual para ver si mi cadena es más antigua que ahora.
Para usarlo:
fuente
Para comparar la fecha solo con el año - mes - día y sin tiempo para mí funcionó así:
fuente
Si desea ignorar los segundos, por ejemplo, puede usar
func isDate (Date, equalTo: Date, toUnitGranularity: NSCalendar.Unit) -> Bool
Ejemplo compare si es el mismo día:
fuente
En el momento de este escrito, Swift soportes de forma nativa la comparación de fechas con todos los operadores de comparación (es decir
<
,<=
,==
,>=
, y>
). También puede comparar fechas opcionales, pero se limitan a<
,==
, y>
. Si necesita comparar dos fechas opcionales usando<=
o>=
, es decirPuede sobrecargar los operadores
<=
y>=
para admitir opciones:fuente
fuente
Otra forma de hacerlo:
fuente
fuente
Rápido 5:
1) Si usa el tipo de fecha:
2) Si usa el tipo de cadena:
No estoy seguro o la segunda opción funciona al 100%. Pero, ¿cuánto no cambiaría los valores de firstStringDate y secondStringDate? El resultado fue correcto.
fuente
en Swift 3,4 debe usar "Comparar". por ejemplo:
fuente