Me pregunto si hay alguna posibilidad nueva e increíble de obtener la cantidad de días entre dos NSDates en Swift / el "nuevo" Cocoa.
Por ejemplo, como en Ruby, haría:
(end_date - start_date).to_i
ios
swift
date
date-difference
Linus
fuente
fuente
Respuestas:
También debes considerar la diferencia horaria. Por ejemplo, si compara las fechas
2015-01-01 10:00
y2015-01-02 09:00
, los días entre esas fechas volverán como 0 (cero) ya que la diferencia entre esas fechas es menos de 24 horas (son 23 horas).Si su propósito es obtener el número de día exacto entre dos fechas, puede solucionar este problema de la siguiente manera:
Versión Swift 3 y Swift 4
fuente
calendar.date(bySettingHour: 12, minute: 00, second: 00, of: calendar.startOfDay(for: firstDate))
startOfDay()
parece ser innecesario):calendar.date(bySettingHour: 12, minute: 0, second: 0, of: firstDate)
.Aquí está mi respuesta para Swift 2:
fuente
today
ytomorrow
Veo un par de respuestas de Swift3, así que agregaré las mías:
El nombre se siente más rápido, es una línea y usa el
dateComponents()
método más reciente .fuente
Traduje mi respuesta de Objective-C
resultado
La parte más difícil fue que el autocompletado insiste en que fromDate y toDate serían
NSDate?
, pero de hecho deben serNSDate!
como se muestra en la referencia.No veo cómo se vería una buena solución con un operador, ya que desea especificar la unidad de manera diferente en cada caso. Puede devolver el intervalo de tiempo, pero no ganará mucho.
fuente
.DayCalendarUnit
está en desuso. Creo que ahora deberías usar.CalendarUnitDay
en su lugar.let components = cal.components(.Day, fromDate: startDate, toDate: endDate, options: [])
.Day
momentoAquí es muy agradable,
Date
extensión para obtener la diferencia entre fechas en años, meses, días, horas, minutos, segundos.fuente
date
debe estarsinceDate
en los parámetros de función.days
y funciona bien.func years(since date: Date) -> Int? { return Calendar.current.dateComponents[.year], from: date, to: self).years }
, y podrías llamarlo comolet y = date1.years(since: date2)
. Eso podría ser más consistente con las convenciones de nomenclatura modernas.Actualización para Swift 3 iOS 10 Beta 4
fuente
Aquí está la respuesta para Swift 3 (probado para IOS 10 Beta)
Entonces puedes llamarlo así
fuente
Swift 3. Gracias a Emin Buğra Saral arriba por la
startOfDay
sugerencia.Uso:
fuente
Las cosas integradas en Swift siguen siendo muy básicas. Como deberían ser en esta etapa inicial. Pero puede agregar sus propias cosas con el riesgo de sobrecargar operadores y funciones de dominio global. Sin embargo, serán locales para su módulo.
fuente
Aquí está mi respuesta para Swift 3:
fuente
Apenas hay una biblioteca estándar específica de Swift todavía; sólo los tipos de colección, de cadena y de números básicos lean.
Es perfectamente posible definir tales abreviaturas usando extensiones, pero en lo que respecta a las API listas para usar, no hay Cocoa "nuevo"; Swift simplemente se asigna directamente a las mismas API detalladas de Cocoa que ya existen.
fuente
Voy a agregar mi versión a pesar de que este hilo tiene un año. Mi código se ve así:
Espero que esto ayude a alguien.
Salud,
fuente
El método de Erin actualizado a Swift 3, muestra los días a partir de hoy (sin tener en cuenta la hora del día)
fuente
Esto devuelve una diferencia absoluta en días entre algunos
Date
y hoy:y luego úsalo:
fuente
Puedes usar la siguiente extensión:
Entonces, puedes llamarlo así:
fuente
Swift 3.2
fuente
Toda respuesta es buena. Pero para las localizaciones necesitamos calcular un número de días decimales entre dos fechas. para que podamos proporcionar el formato decimal sostenible.
fuente
Entonces úsalo como
fuente
Swift 3: días desde hoy hasta la fecha
Llamar a una función como esta
fuente
La opción más fácil sería crear una extensión en la fecha.
fuente
si necesita año, mes, días y horas como cadena, use esto
var tomorrow = Calendar.current.date (byAdding: .day, value: 1, to: Date ())!
deje dc = tomorrow.completeOffset (desde: Fecha ())
fuente
Un buen trazador de líneas práctico:
fuente
fuente
Esta es una versión actualizada de la respuesta de Emin para Swift 5 que incorpora la sugerencia de usar el mediodía en lugar de la medianoche como la hora definitiva para comparar días. También maneja la falla potencial de varias funciones de fecha al devolver un opcional.
fuente
Solución rápida 5.2.4:
fuente
Versión 2017, copiar y pegar
fuente
fuente