¿Cómo verificar si un NSDate
pertenece a hoy?
Solía comprobarlo usando los primeros 10 caracteres de [aDate description]
. [[aDate description] substringToIndex:10]
devuelve una cadena como "YYYY-MM-DD"
así, comparé la cadena con la cadena devuelta por [[[NSDate date] description] substringToIndex:10]
.
¿Hay alguna forma más rápida y / o ordenada de verificar?
Gracias.
ios
objective-c
cocoa-touch
nsdate
nscalendar
Seunghoon
fuente
fuente
Respuestas:
En macOS 10.9+ y iOS 8+, ¡hay un método en NSCalendar / Calendar que hace exactamente esto!
Entonces simplemente harías
C objetivo:
Swift 3:
fuente
Puede comparar componentes de fecha:
Editar:
Me gusta más el método de stefan, creo que es una declaración if más limpia y más comprensible:
Chris, he incorporado tu sugerencia. Tuve que buscar qué era, así que para cualquier otra persona que no sepa, distingue entre BC y AD. Esto es probablemente innecesario para la mayoría de las personas, pero es fácil de verificar y agrega cierta certeza, así que lo he incluido. Si buscas velocidad, probablemente este no sea un buen método de todos modos.
NOTA como con muchas respuestas en SO, después de 7 años esto está totalmente desactualizado. En Swift ahora solo usa
.isDateInToday
fuente
Esta es una rama de su pregunta, pero si desea imprimir un NSDate con "Hoy" o "Ayer", use la función
para NSDateFormatter
fuente
Intentaría normalizar la fecha de hoy a medianoche y la segunda fecha, normalizar a medianoche y luego comparar si es el mismo NSDate.
A partir de un ejemplo de Apple , así es como se normaliza a la medianoche de la fecha de hoy, haga lo mismo para la segunda fecha y compare:
fuente
Extensión de trabajo Swift 3 y 4 de la sugerencia de Catfish_Man:
fuente
No es necesario hacer malabarismos con componentes, épocas y demás.
NSCalendar proporciona un método para obtener el comienzo de una determinada unidad de tiempo para una fecha existente.
Este código tendrá el comienzo de hoy y otra fecha y lo comparará. Si se evalúa como
NSOrderedSame
, ambas fechas son durante el mismo día, así que hoy.fuente
Trabajó para mí en Swift 2.0
fuente
Versión rápida de la mejor respuesta:
fuente
Consulte la entrada de documentación de Apple titulada "Realización de cálculos de calendario" [enlace] .
El Listado 13 en esa página sugiere que para determinar la cantidad de medianoches entre días, use:
Luego puede determinar si dos días son iguales utilizando ese método y ver si devuelve 0 o no.
fuente
También puede verificar el intervalo de tiempo entre la fecha que tiene y la fecha actual:
Esto le dará el intervalo de tiempo, en segundos, entre myDate y la fecha / hora actual.
Enlace .
Editar: Nota para todos: Soy consciente de que [myDate timeIntervalSinceNow] no determina inequívocamente si myDate es hoy.
Dejo esta respuesta tal como está para que si alguien está buscando algo similar y [myDate timeIntervalSinceNow] es útil, puede encontrarlo aquí.
fuente
timeIntervalSinceNow
ella, ya que está cubierto en muchas otras publicaciones. También manejar la comparación del día con la verificación de segundos fomenta la división propensa a errores en 86400.Extensión rápida basada en las mejores respuestas:
fuente
Si tiene muchas de estas comparaciones de fechas, entonces las llamadas a
calendar:components:fromDate
comenzar a tomar mucho tiempo. Según algunos perfiles que he hecho, parecen ser bastante caros.Digamos que está tratando de determinar cuáles de una serie de fechas, por ejemplo
NSArray *datesToCompare
, son el mismo día que un día determinado, digamosNSDate *baseDate
, entonces puede usar algo como lo siguiente (parcialmente adaptado de una respuesta anterior):Salida:
fuente
¡Hay una manera más fácil que muchas de las respuestas anteriores!
fuente
Esto probablemente podría ser modificado como una categoría NSDate, pero utilicé:
(Sin embargo, comparar las dos cadenas de fecha como en la pregunta original casi se siente 'más limpio' ...)
fuente
comps
cuando los está configurando inmediatamente en cero? Además, creo que debes incluir la era.para iOS7 y versiones anteriores:
fuente
Mira nuestra Erica Sadun es genial
NSDate extension
. Muy simple de usar. Bien, aquí:http://github.com/erica/NSDate-Extensions
Ya está allí en esta publicación: https://stackoverflow.com/a/4052798/362310
fuente
La solución correcta y segura sin desenvolver la fuerza, trabajando en Swift 2.2 y antes de iOS 8:
fuente
Aquí está mi respuesta de 2 centavos que se basa en la respuesta aceptada pero que también admite la API más nueva. Nota: uso el calendario gregoriano ya que la mayoría de las marcas de tiempo son GMT, pero cambio el tuyo como mejor te parezca
fuente
Mi solución es calcular cuántos días pasaron desde 1970 por división y comparar la parte entera
fuente
fuente