trucos hobba hevvo hartico habtium habbo fantasy creditos comandos ios swift nsdate nscalendar

ios - hobba - Swift: comprueba si una marca de tiempo es ayer, hoy, mañana o X días



hartico (4)

Actualización de Swift 4:

let calendar = Calendar.current let date = Date() calendar.isDateInYesterday(date) calendar.isDateInToday(date) calendar.isDateInTomorrow(date)

Estoy tratando de averiguar cómo decidir si una marca de tiempo dada ocurre hoy, o +1 / -1 días. Esencialmente, me gustaría hacer algo como esto (Pseudocódigo)

IF days_from_today(timestamp) == -1 RETURN ''Yesterday'' ELSE IF days_from_today(timestamp) == 0 RETURN ''Today'' ELSE IF days_from_today(timestamp) == 1 RETURN ''Tomorrow'' ELSE IF days_from_today(timestamp) < 1 RETURN days_from_today(timestamp) + '' days ago'' ELSE RETURN ''In '' + days_from_today(timestamp) + '' ago''

Sin embargo, es crucial que esté en Swift y estoy luchando con los objetos NSDate / NSCalendar. Comencé con la diferencia horaria como esta:

let calendar = NSCalendar.currentCalendar() let date = NSDate(timeIntervalSince1970: Double(timestamp)) let timeDifference = calendar.components([.Second,.Minute,.Day,.Hour], fromDate: date, toDate: NSDate(), options: NSCalendarOptions())

Sin embargo, la comparación de esta manera no es fácil, porque el .Day es diferente según la hora del día y la marca de tiempo. En PHP, solo uso mktime para crear una nueva fecha, basada en el inicio del día (es decir, mktime(0,0,0) ), pero no estoy seguro de mktime(0,0,0) es la forma más fácil de hacerlo en Swift.

¿Alguien tiene una buena idea sobre cómo abordar esto? Tal vez una extensión a NSDate o algo similar sería mejor?


NSCalender tiene nuevos métodos que puede utilizar directamente.

NSCalendar.currentCalendar().isDateInTomorrow(NDSate())//Replace NSDate() with your date NSCalendar.currentCalendar().isDateInYesterday() NSCalendar.currentCalendar().isDateInTomorrow()

Espero que esto ayude


NSCalendar tiene métodos para los tres casos.

func isDateInYesterday(_ date: NSDate) -> Bool func isDateInToday(_ date: NSDate) -> Bool func isDateInTomorrow(_ date: NSDate) -> Bool

Para calcular los días anteriores a ayer use.

func components(_ unitFlags: NSCalendarUnit, fromDate startingDate: NSDate, toDate resultDate: NSDate, options opts: NSCalendarOptions) -> NSDateComponents

Pase .Day a unitFlags y obtenga la propiedad del day del resultado.

Editar:

Esta es una función que considera que también is in para fechas anteriores y posteriores al eliminar la parte del tiempo.

func dayDifferenceFromDate(timestamp : Int) -> String { let calendar = NSCalendar.currentCalendar() let date = NSDate(timeIntervalSince1970: Double(timestamp)) if calendar.isDateInYesterday(date) { return "Yesterday" } else if calendar.isDateInToday(date) { return "Today" } else if calendar.isDateInTomorrow(date) { return "Tomorrow" } else { let startOfNow = calendar.startOfDayForDate(NSDate()) let startOfTimeStamp = calendar.startOfDayForDate(date) let components = calendar.components(.Day, fromDate: startOfNow, toDate: startOfTimeStamp, options: []) let day = components.day if day < 1 { return "/(abs(day)) days ago" } else { return "In /(day) days" } } }

Actualización para Swift 3+:

func dayDifference(from interval : TimeInterval) -> String { let calendar = NSCalendar.current let date = Date(timeIntervalSince1970: interval) if calendar.isDateInYesterday(date) { return "Yesterday" } else if calendar.isDateInToday(date) { return "Today" } else if calendar.isDateInTomorrow(date) { return "Tomorrow" } else { let startOfNow = calendar.startOfDay(for: Date()) let startOfTimeStamp = calendar.startOfDay(for: date) let components = calendar.dateComponents([.day], from: startOfNow, to: startOfTimeStamp) let day = components.day! if day < 1 { return "/(abs(day)) days ago" } else { return "In /(day) days" } } }


Swift 3.0 / 4.0:

Calendar.current.isDateInToday(yourDate) Calendar.current.isDateInYesterday(yourDate) Calendar.current.isDateInTomorrow(yourDate)

Adicionalmente:

Calendar.current.isDateInWeekend(yourDate)

Tenga en cuenta que para algunos países, el fin de semana puede ser diferente al sábado a domingo, depende del calendario.

También puede usar autoupdatingCurrent lugar del calendario current que hará un seguimiento de las actualizaciones de los usuarios. Puedes usarlo de la misma manera:

Calendar.autoupdatingCurrent.isDateInToday(yourDate)

Calendar es un alias de tipo para el NSCalendar .