swift - DateUtil

class DateUtil: NSObject {


    class func dateFormatterStrByM(dateStr:String)->String{
        let dateFormatter:NSDateFormatter=NSDateFormatter()
        dateFormatter.dateFormat="yyyy-MM-dd HH:mm:ss"
        let date:NSDate=dateFormatter.dateFromString(dateStr)!

        let showFormatter:NSDateFormatter=NSDateFormatter()
        showFormatter.dateFormat="MM月dd日 HH:mm"
        return showFormatter.stringFromDate(date)
    }

    //根據時間字符轉換爲固定格式的時間字符串,精確到分鐘 如:2015-12-21 22:10
    class func dateFormatterStrByS(dateStr:String)->String{
        let dateFormatter:NSDateFormatter=NSDateFormatter()
        dateFormatter.dateFormat="yyyy-MM-dd HH:mm:ss"
        let date:NSDate=dateFormatter.dateFromString(dateStr)!

        let showFormatter:NSDateFormatter=NSDateFormatter()
        showFormatter.dateFormat="yyyy-MM-dd"
        return showFormatter.stringFromDate(date)
    }

    //根據時間字符轉換爲固定格式的時間字符串,精確到分鐘 如:2015-12-21 22:10
    class func dateFormatterStr(dateStr:String)->String{
        let dateFormatter:NSDateFormatter=NSDateFormatter()
        dateFormatter.dateFormat="yyyy/MM/dd HH:mm:ss"
        let date:NSDate=dateFormatter.dateFromString(dateStr)!

        let showFormatter:NSDateFormatter=NSDateFormatter()
        showFormatter.dateFormat="yyyy-MM-dd HH:mm"
        return showFormatter.stringFromDate(date)
    }

    //根據時間字符轉換爲固定格式的時間字符串如:2015-12-21
    class func dateFormatterDay(dateStr:String)->String{
        let dateFormatter:NSDateFormatter=NSDateFormatter()
        dateFormatter.dateFormat="yyyy/MM/dd HH:mm:ss"
        let date:NSDate=dateFormatter.dateFromString(dateStr)!

        let showFormatter:NSDateFormatter=NSDateFormatter()
        showFormatter.dateFormat="yyyy-MM-dd"
        return showFormatter.stringFromDate(date)
    }

    //根據時間字符轉換爲固定格式的時間字符串,精確到分鐘 如:22:10:11
    class func dateFormatterhms(dateStr:String)->String{
        let dateFormatter:NSDateFormatter=NSDateFormatter()
        dateFormatter.dateFormat="yyyy/MM/dd HH:mm:ss"
        let date:NSDate=dateFormatter.dateFromString(dateStr)!

        let showFormatter:NSDateFormatter=NSDateFormatter()
        showFormatter.dateFormat="HH:mm:ss"
        return showFormatter.stringFromDate(date)
    }

    //根據時間戳還原時間格式,精確到秒,如:2015-12-21 22:10:10
    class func restoreTimeFullString(date:NSTimeInterval)->String{
        let dateFormatter:NSDateFormatter=NSDateFormatter()
        dateFormatter.dateFormat="yyyy/MM/dd HH:mm:ss"
        let pointDate:NSDate=NSDate(timeIntervalSince1970: date)
        return dateFormatter.stringFromDate(pointDate)
    }

    //根據時間戳顯示時間格式,精確到分鐘,如:2015-12-21 22:10
    class func minuteFullString(date:Double)->String{
        let dateFormatter:NSDateFormatter=NSDateFormatter()
        dateFormatter.dateFormat="yyyy-MM-dd HH:mm"
        let pointDate:NSDate=NSDate(timeIntervalSince1970: NSTimeInterval(date))
        return dateFormatter.stringFromDate(pointDate)
    }

    //根據時間戳顯示時間格式,精確到分鐘,如:12月21日 22:10
    class func jieMinuteFullString(date:Double)->String{
        let dateFormatter:NSDateFormatter=NSDateFormatter()
        dateFormatter.dateFormat="MM月dd日 HH:mm"
        let pointDate:NSDate=NSDate(timeIntervalSince1970: NSTimeInterval(date))
        return dateFormatter.stringFromDate(pointDate)
    }

    //根據時間字符轉換爲1970年以來的時間戳(精確),單位爲秒
    class func dateTimestampExact(dateStr:String)->Double{
        let dateFormatter:NSDateFormatter=NSDateFormatter()
        dateFormatter.dateFormat="yyyy/MM/dd HH:mm:ss"
        let date:NSDate=dateFormatter.dateFromString(dateStr)!
        return date.timeIntervalSince1970
    }


    //根據時間戳顯示小時格式,如: 22:10
    class func hourString(date:Double)->String{
        let dateFormatter:NSDateFormatter=NSDateFormatter()
        dateFormatter.dateFormat="HH:mm"
        let pointDate:NSDate=NSDate(timeIntervalSince1970: NSTimeInterval(date))
        return dateFormatter.stringFromDate(pointDate)
    }

    //根據時間戳顯示簡要時間描述格式,如:今天 22:10
    class func getDescTime(date:Double,sysDate:Double)->String{
        var descTime:String=""
        var hourTime:String=""
        if date>0{
            let d1_time:Double=round(date * 1000)
            let d2_time:Double=round(sysDate * 1000)
            let days:Int=Int(daysBetween(d2_time,bdate: d1_time))
            hourTime=hourString(date)

            if days<0 {
                let daysAfter:Int=abs(days)
                if(daysAfter==0){
                    descTime="今天"
                }else{
                    return jieMinuteFullString(date)
                    //descTime="\(daysAfter)天后"
                }
                return "\(descTime) \(hourTime)"
            }


            if(days==0){
                descTime="今天"
            }else if(days==1){
                descTime="昨天"
            }else if(days==2){
                descTime="前天"
            }else if(days>2 && days<7){
                descTime="\(days)天前"
            }else if(days>=7 && days<=30){
                descTime="一週前"
            }else if(days>=30 && days<=182){
                descTime="一月前"
            }else if(days>=182 && days<=365){
                descTime="半年前"
            }else if(days>=365){
                descTime="一年前"
            }else{
                return minuteFullString(date)
            }

            return "\(descTime) \(hourTime)"

        }else{
            return minuteFullString(date)
        }

    }

    //顯示倒計時
    class func countDown(date:Double,ntimes:Double,timeOver:()->Void)->String{
        var teimsdescs:String=""
        if date>0{
            let d1_time:Double=date*Double(1000)
            let d2_teim:Double=ntimes*Double(1000)

            let diff:Int64 = Int64(round(d1_time-d2_teim))

            if diff>0{
                let day:Int64=diff/(24*60*60*1000)
                let hour:Int64=diff/(60*60*1000)-(day*24)

                let min:Int64=((diff / (60*1000))-(day*24*60)-(hour*60))

                let s:Int64=diff / 1000 - (day*24*60*60)-(hour*60*60)-(min*60)

                teimsdescs="\(day)天\(hour)時\(min)分\(s)秒"
            }else{
                timeOver()
            }
        }
        return teimsdescs
    }

    //時間差運算
    class func daysBetween(smdate:Double,bdate:Double)->Double{
        return (smdate/Double(86400000))-(bdate/Double(86400000))
    }

    /**
    * 判斷兩個時間之間的相差天數 (爲正整數時間)
    * @param preTime
    * @param nowTime
    * @return
    */
    class func diffDay(preTime:Double,nowTime:Double)->Double{
        return abs((nowTime - preTime) / 1000 / 3600 / 24)
    }



}
發佈了67 篇原創文章 · 獲贊 12 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章