ios - Swift - 检查时间戳是昨天、今天、明天还是 X 天前

标签 ios swift nsdate nscalendar

我正在尝试找出如何确定给定时间戳是在今天还是 +1/-1 天出现。本质上,我想做这样的事情(伪代码)

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'

但至关重要的是,它需要在 Swift 中,而我正在努力处理 NSDate/NSCalendar 对象。我开始像这样计算时差:

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

但是以这种方式进行比较并不容易,因为 .Day 根据一天中的时间和时间戳而不同。在 PHP 中,我只是使用 mktime 根据一天的开始创建一个新日期(即 mktime(0,0,0)),但我不确定最简单的方法在 Swift 中做到这一点。

有人知道如何处理这个问题吗?也许 NSDate 的扩展或类似的东西是最好的?

最佳答案

swift 3/4/5:

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

另外:

Calendar.current.isDateInWeekend(yourDate)

请注意,对于某些国家/地区,周末可能不同于周六至周日,这取决于日历。

您还可以使用 autoupdatingCurrent 代替 current 日历,它将跟踪用户更新。您以相同的方式使用它:

Calendar.autoupdatingCurrent.isDateInToday(yourDate)

CalendarNSCalendar 的类型别名。

关于ios - Swift - 检查时间戳是昨天、今天、明天还是 X 天前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39345101/

相关文章:

ios - 为什么-tableView :heightForRowAtIndexPath: is a delegate method instead of a data source method?

swift - 为什么在 Swift 中将 nil 分配给可选变量是正确的?

iphone - 使用 NSDateformatter 将 NSString 转换为 NSDate

ios - 即使应用程序关闭也运行时钟或计时器

iphone - 将字符串转换为 NSDate 对象

iOS - 导航 Controller 和自定义 View

iphone - 如何取消使用 AudioServicesPlaySystemSound 启动的播放声音?

ios - 如何从 iOS 中的 Twitter 时间线对象获取大尺寸的用户个人资料图像

swift - 如何创建一个通用的完成闭包?

swift - 如何在 Swift 中过滤字典数组