2015-11-07 196 views
0

我有,我希望能夠通過每一個檢查NSDates的數組,並整理,其中一個是最接近今天。檢查其日期最接近今天

是否有這樣做的任何方法或功能?因此,例如,這是我的日期:

var dateArr = ["2015-11-08", "2015-11-09", "2015-11-10"] 

我現在想遍歷它們,並把它們按照最近的日期到當前日期的順序。

回答

2

據我所知,你有NSDates在一個數組中。我用這個代碼來創建日期排列:

let cal = NSCalendar.currentCalendar() 
let d1 = cal.dateFromComponents(
    { 
     let comp = NSDateComponents() 
     comp.year = 2015 
     comp.month = 11 
     comp.day = 8 
     return comp 
    }()) 

let d2 = cal.dateFromComponents(
    { 
     let comp = NSDateComponents() 
     comp.year = 2015 
     comp.month = 11 
     comp.day = 9 
     return comp 
    }()) 

let d3 = cal.dateFromComponents({ 
    let comp = NSDateComponents() 
    comp.year = 2015 
    comp.month = 11 
    comp.day = 6 
    return comp 
    }()) 

let dates = [d1!,d2!,d3!] 

排序本身我做

var today:NSDate? 
// creates an date at the beginning an given time unit, here Day 
cal.rangeOfUnit(.Day, startDate: &today, interval: nil, forDate: NSDate()) 

let sortedDates = dates.sort { (d1, d2) -> Bool in 
    var t1 = abs(d1.timeIntervalSinceDate(today!)) 
    var t2 = abs(d2.timeIntervalSinceDate(today!)) 
    return t1 <= t2 
} 

print(sortedDates) 
+0

謝謝你這是一個更好的答案後,進一步的研究 –

5

如果你想在最接近的日期的順序排序與NSDate對象數組到當前的日期,你可以做這樣的:

let toodayUnixTime = NSDate().timeIntervalSince1970 
// array with `NSDate` objects 
var dates = [...] 
// Sort action 
dates.sortInPlace({ abs($0.timeIntervalSince1970 - toodayUnixTime) < abs($1.timeIntervalSince1970 - toodayUnixTime) }) 

在這種情況下,我們有dates陣列NSDate。排序數組的第一個對象最接近當前日期。

+0

感謝,雖然這些都是「dateArr」的NSDate對象,我都顯示他們爲字符串,所以你其實可以看到不同的日期,我認爲對不起我的錯!我只需要能夠按照最接近當前日期的順序對數組內的NSDate元素進行排序。你的答案是否這樣做? –

+0

@HenryBrown我編輯你的案例的答案 –

+0

這些今天沒有排序,但現在。這將導致不同的結果。 – vikingosegundo

相關問題