2016-06-10 63 views

回答

1

NSDate毫秒部分是NSDate(). timeIntervalSinceReferenceDate的小數部分。您只需使用您想比較的日期來區分兩個值。

0

爲NSDates做操作符重載有一點樂趣,所以這裏是所有您需要的比較運算符。唯一需要調整的是在變量timeMargin中等於日期的時間範圍內。

let timeMargin = 0.1 

func ==(left: NSDate, right : NSDate) -> Bool { 

    let leftTime = left.timeIntervalSinceNow 
    let rightTime = right.timeIntervalSinceNow 

    let diff = abs(leftTime - rightTime) 

    return diff <= timeMargin 
} 

func >(left: NSDate, right : NSDate) -> Bool { 

    let leftTime = left.timeIntervalSinceNow 
    let rightTime = right.timeIntervalSinceNow 

    let marginalTime = leftTime - rightTime 

    return marginalTime > 0 
} 

func <(left: NSDate, right : NSDate) -> Bool { 

    let leftTime = left.timeIntervalSinceNow 
    let rightTime = right.timeIntervalSinceNow 

    let marginalTime = leftTime - rightTime 

    return marginalTime < 0 
} 

func >=(left: NSDate, right : NSDate) -> Bool { 

    let leftTime = left.timeIntervalSinceNow 
    let rightTime = right.timeIntervalSinceNow 

    let marginalTime = leftTime - rightTime 

    return marginalTime >= -timeMargin 
} 

func <=(left: NSDate, right : NSDate) -> Bool { 

    let leftTime = left.timeIntervalSinceNow 
    let rightTime = right.timeIntervalSinceNow 

    let marginalTime = leftTime - rightTime 

    return marginalTime <= timeMargin 
} 

實施

let date1 = NSDate() 
let date2 = NSDate().dateByAddingTimeInterval(0.08) 

date1 == date2 ? "Date1 is equal to Date2" : "Date is NOT equal to Date2" 
//Prints("Date1 is equal to Date2") 

date1 < date2 ? "Date1 is less than Date2" : "Date is NOT less than Date2" 
//Prints("Date is less than Date2") 

date1 > date2 ? "Date1 is more than Date2" : "Date is NOT more than Date2" 
//Prints("Date1 is NOT more than Date2") 

date1 <= date2 ? "Date1 is less than or equal to Date2" : "Date is NOT less than or equal to Date2" 
//Prints("Date1 is less than or equal to Date2") 

date1 >= date2 ? "Date1 is greater than or equal to Date2" : "Date is NOT more than or equal to Date2" 
//Prints("Date1 is greater than or equal to Date2") 

注:

使用dateByAddingTimeInterval沒有確切的增量總是返回時間。一世。即NSDate().dateByAddingTimeInterval(0.10)實際上可能會添加0.100,因此如果它是小於或大於您的時間裕度的細線部分,它會返回不希望的結果。所以在比較日期前如果使用這個,請小心。