Estoy tratando de obtener la diferencia entre la fecha actual como NSDate()
y una fecha de un PHP time();
llamada, por ejemplo: NSDate(timeIntervalSinceReferenceDate: 1417147270)
. ¿Cómo hago para obtener la diferencia de tiempo entre las dos fechas? Me gustaría tener una función que compare las dos fechas y if(seconds > 60)
luego devuelva minutos, if(minutes > 60)
horas de if(hours > 24)
devolución y días de devolución, etc.
¿Cómo debo hacer esto?
EDITAR: La respuesta aceptada actual ha hecho exactamente lo que quería hacer. Lo recomiendo para un uso fácil para obtener el tiempo entre dos fechas en la forma que time()
usa la función PHP . Si no está familiarizado con PHP, es el tiempo en segundos desde el 1 de enero de 1970. Esto es beneficioso para un back-end en PHP. Si tal vez está utilizando un backend como NodeJS, es posible que desee considerar algunas de las otras opciones que encontrará a continuación.
NSDateComponentsFormatter
. Es muy configurable, lo que le permite obtener resultados concisos (p.maximumUnitCount = 1
. Ej .).Respuestas:
Xcode 8.3 • Swift 3.1 o posterior
Puede usar el Calendario para ayudarlo a crear una extensión para hacer sus cálculos de fecha de la siguiente manera:
Uso del formateador de componentes de fecha
fuente
.CalendarUnitSecond
da error'NSCalendarUnit.Type' does not have a member named 'CalendarUnitSecond'
, ¿sabes cómo resolverlo?NSCalendarUnit
, implementado comoreturn Calendar.current().components(unit, from: date, to: self, options: [])?. valueForComponent(unit)
(en iOS> 8).DateComponentsFormatter
es MUCHO mejor que hacerlo a la larga, eso realmente debería ser lo más importante.Si alguien necesita mostrar todas las unidades de tiempo, por ejemplo, "horas minutos segundos", no solo "horas". Digamos que la diferencia horaria entre dos fechas es 1 hora 59 minutos 20 segundos. Esta función mostrará "1h 59m 20s".
Aquí está mi código Objective-C:
En Swift 3+:
fuente
Usted pregunta:
Supongo que está tratando de construir una representación de cadena del tiempo transcurrido entre dos fechas. En lugar de escribir su propio código para hacerlo, Apple ya tiene una clase diseñada para hacer precisamente eso. Es decir, use
DateComponentsFormatter
, establezca losallowedUnits
valores que tengan sentido para su aplicación, establezcaunitsStyle
lo que desee (por ejemplo.full
) y luego llamestring(from:to:)
.Por ejemplo, en Swift 3:
Esto también localizará la cadena apropiada para el dispositivo en cuestión.
O, en Swift 2.3:
Si está buscando los valores numéricos reales, simplemente use
dateComponents
. Por ejemplo, en Swift 3:O, en Swift 2.3:
fuente
Extension + DateComponentsFormatter combinados de la respuesta de @ leo-dabus
Xcode 8.3 • Swift 3.1
fuente
fuente
Agregué una versión "larga" a la respuesta de Leo Dabus en caso de que desee tener una cadena que diga algo así como "hace 2 semanas" en lugar de solo "2w" ...
fuente
-> Use esto para encontrar el intervalo de tiempo entre dos fechas en Swift (con dos cadenas).
fuente
Código ligeramente modificado para Swift 3.0
fuente
Swift 5.1 • iOS 13
Puede usar RelativeDateFormatter que Apple introdujo en iOS 13.
Consulte Cómo mostrar una fecha y hora relativas usando RelativeDateTimeFormatter .
fuente
Si su propósito es obtener el número exacto de días entre dos fechas, puede solucionar este problema de la siguiente manera:
fuente
Con Swift 3, de acuerdo con sus necesidades, puede elegir una de las dos formas siguientes para resolver su problema.
1. Mostrar la diferencia entre dos fechas para el usuario
Puede usar a
DateComponentsFormatter
para crear cadenas para la interfaz de su aplicación.DateComponentsFormatter
tiene unamaximumUnitCount
propiedad con la siguiente declaración:Al establecer
maximumUnitCount
el valor en1
, tiene la garantía de mostrar la diferencia en una solaDateComponentsFormatter
unidad (años, meses, días, horas o minutos).El siguiente código de Playground muestra cómo mostrar la diferencia entre dos fechas:
Tenga en cuenta que
DateComponentsFormatter
redondea el resultado. Por lo tanto, una diferencia de 4 horas y 30 minutos se mostrará como 5 horas .Si necesita repetir esta operación, puede refactorizar su código:
2. Obtenga la diferencia entre dos fechas sin formatear
Si no necesita mostrar con el formato la diferencia entre dos fechas para el usuario, puede usar
Calendar
.Calendar
tiene un métododateComponents(_:from:to:)
que tiene la siguiente declaración:El siguiente código de Playground que se usa
dateComponents(_:from:to:)
muestra cómo recuperar la diferencia entre dos fechas devolviendo la diferencia en un solo tipo deCalendar.Component
(años, meses, días, horas o minutos).Si necesita repetir esta operación, puede refactorizar su código:
fuente
En Swift 2.2
fuente
Una pequeña adición a la respuesta de Leo Dabus para proporcionar las versiones en plural y ser más legible para los humanos.
Swift 3
fuente
Esta es la versión más corta: Básicamente trato de obtener la diferencia entre la marca de tiempo de publicación con el
Date()
ahora.fuente
Aquí está mi respuesta para las respuestas Swift 3 anteriores. Esto es actual a partir de noviembre de 2016, la versión de Xcode fue 8.2 Beta (8C23). Utilicé algunas de las sugerencias de Sagar y Emin anteriores y, a veces, tuve que dejar que Xcode se completara automáticamente para sugerir la sintaxis. Parecía que la sintaxis realmente cambió a esta versión beta.
buyDate
Obtuve de un DatePicker:fuente
NSCalendar
Swift 3. UsoCalendar
. Entonces esto se simplifica alet calendar = Calendar.current
. Y entoncescomponents
se vería así:let components = calendar.dateComponents([.day], from: date1, to: date2)
.Para XCode Versión 8.3.3 y Swift 3.0:
fuente
Alguna adición en jose920405 responde para que sea compatible con Swift 3.0 y superior
fuente
Usa este código:
La producción es: Resultado: 10 años 1 mes y 18 días
fuente
Utilizar:
fuente