時間業(yè)務(wù)邏輯需求
- 如果是今年
- 如果是今天
- 如果小于60秒 顯示格式: 剛剛
- 如果 s >= 60 && s < 6060 顯示格式: xx分鐘前
- 如果 s >= 6060 顯示格式: xx小時前
- 如果是昨天
e.g. 2016-06-29 12:12:12 顯示格式: 昨天 12:12
- 如果是其他
e.g. 2016-06-12 13:13:13 顯示格式: 06月12日 13:13
- 如果不是今年
e.g. 2015-05-05 10:10:10 顯示格式: 2015年05月05日 10:10按照上述要求,封裝兩個函數(shù),一個用來判斷是否是今年,這里傳入的是參數(shù)為NSDate類型
//判斷是否是今年
private func isThisYearOrNot (currentDate: NSDate) -> Bool {
// 實例化一個格式化時間
let formatterDate = NSDateFormatter()
formatterDate.locale = NSLocale(localeIdentifier: "en_US")
// 設(shè)置時間格式: 只取年
formatterDate.dateFormat = "yyyy"
let yearString = formatterDate.stringFromDate(currentDate)
// 獲取當(dāng)前時間(String類型)
let currentYearString = formatterDate.stringFromDate(NSDate())
// 判斷是否是今年 因為Swift中String是一個結(jié)構(gòu)體,所以可以使用==進行判斷,OC中==是地址判斷
if yearString == currentYearString { //是今年
return true
} else { // 不是今年
return false
}
}
按照需求的時間格式返回時間(String類型)
參數(shù)和返回值均為String類型
private func getFormatterTime (timeString: String) -> String {
// 實例化一個格式化時間
let formatterDate = NSDateFormatter()
// 設(shè)置時間格式 //Thu Jun 30 15:21:04 +0800 2016 ---- +0800 時區(qū) z
formatterDate.dateFormat = "EEE MMM dd HH:mm:ss z yyy"
// 設(shè)置地區(qū) 避免時間出錯(模擬器上不會出現(xiàn)問題,真機上可能會出現(xiàn)事件錯誤,所以需要設(shè)置地區(qū))
formatterDate.locale = NSLocale(localeIdentifier: "en_US")
// 將傳遞的字符串轉(zhuǎn)換為自定義的格式化時間 因為傳遞的是一個必選項,所以這里強行解包,否則下面多處使用該參數(shù)還需要分別解包
let originalDate = formatterDate.dateFromString(timeString)!
// 判斷事件輸出格式: 是否是今年
let isThisYear: Bool = isThisYearOrNot(originalDate)
if isThisYear { // 是今年
// 獲取當(dāng)前日歷
let calender = NSCalendar.currentCalendar()
// 如果是今天
if calender.isDateInToday(originalDate) { // 今天
//獲取差值
let s = NSDate().timeIntervalSinceDate(originalDate)
if s < 60 {
// 如果小于60秒 顯示格式: 剛剛
return "剛剛"
} else if s >= 60 && s < 60*60 {
// 顯示格式: xx分鐘前
return "\(Int(s/60))分鐘前"
} else {
// 顯示格式: xx小時前 NSTimeInterval類型是Double的別名,所以這里轉(zhuǎn)成Int類型拼接返回
return "\(Int(s/3600))小時前"
}
} else if calender.isDateInYesterday(originalDate) { // 昨天 顯示格式: 昨天 12:12
// 設(shè)置時間格式
formatterDate.dateFormat = "昨天: HH:mm"
return formatterDate.stringFromDate(originalDate)
} else { //其他 顯示格式: 06月12日 13:13
// 設(shè)置時間格式
formatterDate.dateFormat = "MM月dd日 HH:mm"
return formatterDate.stringFromDate(originalDate)
}
} else { // 不是今年 顯示格式: 2015年05月05日 10:10
formatterDate.dateFormat = "yyyy年MM月dd日 HH:mm"
let date = formatterDate.stringFromDate(originalDate)
return date;
}
}
通過格式化時間將NSDate和String互轉(zhuǎn)可以使用下面兩個方法
func dateFromString(string: String) -> NSDate?
func stringFromDate(date: NSDate) -> String