如何在 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 并进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

今天按 NSDate 对 NSArray 进行排序

如何在 JSONKit 中 JSON 序列化 NSDate 字典

如何通过 NSDate 属性对 NSMangedObjects 进行排序

如何在 iOS 中检查 NSArray 是不是为空或为空?

如何使用格式化程序将字符串日期转换为 nsdate?

按对象方法的结果对 NSArray 进行排序