Restar fechas en swift

publicado por: user9099

Necesito restar dos fechas y obtener el número de dias que transcurren de una a otra.

Tengo este código en el que obtengo los campos de la fecha, por lo que lo puedo poner en cualquier formato:

let arrayFechaDesde = AppDelegate().explode(caracter: " ", cadena: fechaDesde)
let arrayFechaDesdeDos = AppDelegate().explode(caracter: " ", cadena: arrayFechaDesde[1])
let dayDesde = arrayFechaDesdeDos[0]
let monthDesde = arrayFechaDesdeDos[1]
let yearDesde = arrayFechaDesdeDos[2]

let arrayFechaHasta = AppDelegate().explode(caracter: " ", cadena: fechaHasta)
let arrayFechaHastaDos = AppDelegate().explode(caracter: " ", cadena: arrayFechaHasta[1])
let dayHasta = arrayFechaHastaDos[0]
let monthHasta = arrayFechaHastaDos[1]
let yearHasta = arrayFechaHastaDos[2]

La variable fechaDesde y fechaHasta tienen este formato: 11/10/2016 08:00

Como puedo restar ambas fechas para obtener el numero de dias que han transcurrido de una a otra??

solución

Para restar ambas fechas no es necesario que separes en un arreglo dia, mes, año.

En swift tienes el objeto de tipo NSCalendar que básicamente en su documentación dice :

NSCalendar Documentación en Ingles

NSCalendar son objetos que encapsulan información sobre calculos de tiempo…

Creamos un objeto NSCalendar

let calendar = NSCalendar.currentCalendar()

Luego creamos

let fecha_desde = calendar.startOfDayForDate(fechaDesde)
let fecha_hasta = calendar.startOfDayForDate(fechaHasta)

Este metodo startOfDayForDate devuelve la fecha e ignora la hora que tu fecha tiene. ¿Por que hacemos esto? Porque si quieres saber exactamente la diferencia en dias entre dos fechas debes ignorar las horas porque esto puede devolverte 0 en caso que no hayan transcurrido 24 horas entre una fecha y otra.

Luego

let dias= NSCalendarUnit.Day

Creamos una variable del tipo NSCalendarUnit.Day que especifica unidades de calendario en este caso como queremos dias, le decimos Day

let result = calendar.components(dias, fromDate: fecha_desde , toDate: fecha_hasta, options: [])

La funcion calendar.components nos permite calcular la diferencia entre una fecha y otra y en la unidad que queramos, en este caso dias

Y finalmente obtenemos

result.day

Que es la diferencia entre las dos fechas en dias

EDIT

Swift 3 al parecer no trabaja con NSCalendar en su lugar ocupa Calendar

dataComponents swift

En su lugar para swift 3 :

let dias= Set<Calendar.Component>([.day])
let result = calendar.dateComponents(dias, from: fechaDesde as   Date,  to: fechaHasta as Date)
result.day
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *