簡體   English   中英

快速-比較今天和過去的日期

[英]swift - compare the date today and past

我是Swift的新手。 我對日期有疑問。

如果我得到一個類似“ 2016-01-25T10:04:53.498Z”的日期字符串,但我想將現在的日期和日期字符串進行比較。 我該怎么辦?

我以TSWeChat為參考。

let currentDate = NSDate() 

func week() -> String {
    let myWeekday: Int = (Calendar.current as NSCalendar).components([NSCalendar.Unit.weekday], from: self).weekday!
    switch myWeekday {
    case 0:
        return "Sun"
    case 1:
        return "Mon"
    case 2:
        return "Tue"
    case 3:
        return "Wed"
    case 4:
        return "Thu"
    case 5:
        return "Fri"
    case 6:
        return "Sat"
    default:
        break
    }
    return "none"
}

var chatTimeString: String {
    get {
        let calendar = Calendar.current
        let now = Date()
        let unit: NSCalendar.Unit = [
            NSCalendar.Unit.minute,
            NSCalendar.Unit.hour,
            NSCalendar.Unit.day,
            NSCalendar.Unit.month,
            NSCalendar.Unit.year,
        ]
        let nowComponents:DateComponents = (calendar as NSCalendar).components(unit, from: now)
        let targetComponents:DateComponents = (calendar as NSCalendar).components(unit, from: self)

        let year = nowComponents.year! - targetComponents.year!
        let month = nowComponents.month! - targetComponents.month!
        let day = nowComponents.day! - targetComponents.day!

        if year != 0 {
            return String(format: "%zdY%zdM%zdD %02d:%02d", targetComponents.year!, targetComponents.month!, targetComponents.day!, targetComponents.hour!, targetComponents.minute!)
        } else {
            if (month > 0 || day > 7) {
                return String(format: "%zdM%zdD %02d:%02d", targetComponents.month!, targetComponents.day!, targetComponents.hour!, targetComponents.minute!)
            } else if (day > 2) {
                return String(format: "%@ %02d:%02d",self.week(), targetComponents.hour!, targetComponents.minute!)
            } else if (day == 2) {
                if targetComponents.hour! < 12 {
                    return String(format: "The day before yesterday A.M %02d:%02d",targetComponents.hour!, targetComponents.minute!)
                } else if targetComponents.hour == 12 {
                    return String(format: "The day before yesterday P.M %02d:%02d",targetComponents.hour!, targetComponents.minute!)
                } else {
                    return String(format: "The day before yesterday P.M %02d:%02d",targetComponents.hour! - 12, targetComponents.minute!)
                }
            } else if (day == 1) {
                if targetComponents.hour! < 12 {
                    return String(format: "Yesterday A.M %02d:%02d",targetComponents.hour!, targetComponents.minute!)
                } else if targetComponents.hour == 12 {
                    return String(format: "Yesterday P.M %02d:%02d",targetComponents.hour!, targetComponents.minute!)
                } else {
                    return String(format: "Yesterday P.M %02d:%02d",targetComponents.hour! - 12, targetComponents.minute!)
                }
            } else if (day == 0){
                if targetComponents.hour! < 12 {
                    return String(format: "A.M %02d:%02d",targetComponents.hour!, targetComponents.minute!)
                } else if targetComponents.hour == 12 {
                    return String(format: "P.M %02d:%02d",targetComponents.hour!, targetComponents.minute!)
                } else {
                    return String(format: "P.M %02d:%02d",targetComponents.hour! - 12, targetComponents.minute!)
                }
            } else {
                return ""
            }
        }
    }
}

[基於該問題的標題。]不要比較日期成分。 直接比較日期。 如果您有日期字符串,請使用DateFormatter將其轉換回日期。

  2> var past = Date ()
past: Date = 2017-04-28 03:59:08 UTC
  3> var now = Date()
now: Date = 2017-04-28 03:59:15 UTC
  4> now > past
$R0: Bool = true

為了比較現在的日期字符串—將字符串轉換為Date對象,然后將其與now進行比較; Date()初始化。

let dateString = "2016-01-25T10:04:53.498Z"

// Setup a date formatter to match the format of your string
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

// Create a date object from the string
if let date = dateFormatter.date(from: dateString) {

    if date < Date() {
        print("Before now")
    } else {
        print("After now")
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM