为什么我在比较两个日期时出错

Why I am getting error on comparing two dates

我正在尝试比较两个日期,一个来自服务器,另一个是我的本地设备时间。

这是代码片段。

let deviceDate = Date()

let calendar = Calendar.current
let dateNewServer = calendar.date(byAdding: .minute, value: 120, to: dateFromServer!)

//deviceDate -> 2019-06-25 08:28:03 +0000
//dateFromServer -> 2019-06-21 20:00:00 +0000
//dateNewServer -> 2019-06-21 22:00:00 +0000

if (deviceDate >= dateFromServer) && (deviceDate <= dateNewServer){
    print("Live Matches")
}else{
    print("Old/Upcoming Matches")
}

  

           

错误:

二元运算符“>=”不能应用于 'Date' 和 'Date?'

类型的操作数

这是因为您正在尝试比较 Optional(Date) 和 Date 类型。尝试展开您的 dateFromServer 变量。 例如

if (deviceDate >= dateFromServer!){
    print("Live Matches")
}else{
    print("Old/Upcoming Matches")
}

此外,您在这里比较 DateString deviceDate <= "\(dateNewServer)"

   let checkGreaterDate = deviceDate.isGreaterThanDate(dateToCompare: dateFromServer!)
    let checkLesserDate = deviceDate.isLessThanDate(dateToCompare: dateNewServer!)
    if  checkGreaterDate && checkLesserDate{
        print("Live Matches")
    }else{
        print("Old/Upcoming Matches")
    }

辅助方法

    func isLessThanDate(dateToCompare: Date) -> Bool {
    //Declare Variables
    var isLess = false

    //Compare Values
    if self.compare(dateToCompare as Date) == ComparisonResult.orderedAscending {
        isLess = true
    }

    //Return Result
    return isLess
}


func isGreaterThanDate(dateToCompare: Date) -> Bool {
    //Declare Variables
    var isGreater = false

    //Compare Values
    if self.compare(dateToCompare as Date) == ComparisonResult.orderedDescending {
        isGreater = true
    }

    //Return Result
    return isGreater
}

dateNewServer 是一个 optional。所以在进一步使用之前你需要先打开它。这是你的错误所说的。

func date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = default) -> Date?

解决方案:使用可选绑定(if let)强制解包解包(!)可选绑定 是更安全的解包 optional 的方法。

if let dateNewServer = calendar.date(byAdding: .minute, value: 120, to: dateFromServer) {
    if deviceDate.compare(dateFromServer) == .orderedDescending && deviceDate.compare(dateNewServer) == .orderedAscending {
        print("Live Matches")
    } else {
        print("Old/Upcoming Matches")
    }
}