2015-11-07 155 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

相关问题