如何在 NSArray 中检查 NSDate yyyy/mm/dd 并进行比较?
Posted
技术标签:
【中文标题】如何在 NSArray 中检查 NSDate yyyy/mm/dd 并进行比较?【英文标题】:How to check NSDate yyyy/mm/dd in NSArray and compare it? 【发布时间】:2015-08-19 09:11:37 【问题描述】:我有一个 NSArray,里面有一个 NSDate 的 var 给出这种格式 "timeStamp = "2015-08-18 16:58:31"
我想在所有数组中仅比较日期 2015-08-18
比较一下,如果相同的日期只有第一个显示完整的 NSDate
其余日期相同的仅在 UI 上显示时间
这是我到目前为止所做的:
func getAllMessages() -> NSArray
var allMessages = self.mutableSetValueForKey("messages").allObjects as NSArray
let timeStampSortDescriptor = NSSortDescriptor(key: "timeStamp", ascending: true)
var sortByTime = allMessages.sortedArrayUsingDescriptors([timeStampSortDescriptor])
println("\(sortByTime)")
return sortByTime
屏幕截图 http://i.stack.imgur.com/wcsSz.jpg
【问题讨论】:
如果消息日期是今天,您是否尝试显示完整的 NSDate(日期和时间),如果消息时间较早,则仅显示Date
当天第一条消息没有完整的时间和日期,其余相同日期的消息只有时间没有日期
【参考方案1】:
经过一番研究,我确实提出了如下解决方案
首先这个扩展非常好,我的方式取决于它 https://***.com/a/27369380/5188737
如果有人有更好的解决方案或清洁 如果你能把它贴在这里,我将不胜感激
很抱歉没有 cmets
func loadMessages()
if chatRoom!.messages.count > 0
var i = 0
var tempMsgDate:NSDate?
var chatMessage:ChatMessage?
for message in chatRoom!.getAllMessages()
let msg = message as! Message
if i == 0
tempMsgDate = msg.timeStamp
chatMessage = ChatMessage(incoming: msg.income, text: msg.message, sentDate: convertNSDateToString(msg.timeStamp))
i++
else
//if the tempMsgDate (which is the first of the same
//date in the nsarray)
if checkIfSameDayDate(tempMsgDate!,date2: msg.timeStamp)
var tempDate = msg.timeStamp.time
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm"
let date = dateFormatter.dateFromString(tempDate)
println("loadmessages method: \(date?.time)")
chatMessage = ChatMessage(incoming: msg.income, text: msg.message, sentDate: msg.timeStamp.time)
else//after he got to different date it save it as
//first of same date to follow
tempMsgDate = msg.timeStamp
chatMessage = ChatMessage(incoming: msg.income, text: msg.message, sentDate: convertNSDateToString(msg.timeStamp))
var msgCollection:[ChatMessage] = [ChatMessage]()
msgCollection.append(chatMessage!)
chat.loadedMessages.append(msgCollection)
func convertNSDateToString(date:NSDate) -> String
let dateString = date.date + " " + date.time
println("in convert: \(dateString)")
return dateString
func checkIfSameDateFromSendMSGAndReciveMSG(date:NSDate) -> Bool
for message in chatRoom!.getAllMessages()
let msg = message as! Message
if msg.timeStamp.date == date.date
return true
return false
//checks if the date1 equal to date2
func checkIfSameDayDate(date1:NSDate,date2:NSDate) -> Bool
if date1.date == date2.date
return true
return false
【讨论】:
以上是关于如何在 NSArray 中检查 NSDate yyyy/mm/dd 并进行比较?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JSONKit 中 JSON 序列化 NSDate 字典