Arrays 从数组中查找最近的日期

Arrays 从数组中查找最近的日期,arrays,actionscript-3,date,Arrays,Actionscript 3,Date,如何从下面这样的数组中查找最近的日期 Tue Jun 2 17:59:54 GMT+0200 2013 Tue Jun 5 18:00:10 GMT+0200 2013 Tue Jun 1 12:27:14 GMT+0200 2013 Tue Jun 3 17:26:58 GMT+0200 2013 Tue Jun 9 17:27:49 GMT+0200 2013 Tue Jun 1 13:27:39 GMT+0200 2015 Tue Jun 3 12:27:59 GMT+0200 2013

如何从下面这样的数组中查找最近的日期

Tue Jun 2 17:59:54 GMT+0200 2013
Tue Jun 5 18:00:10 GMT+0200 2013
Tue Jun 1 12:27:14 GMT+0200 2013
Tue Jun 3 17:26:58 GMT+0200 2013
Tue Jun 9 17:27:49 GMT+0200 2013
Tue Jun 1 13:27:39 GMT+0200 2015
Tue Jun 3 12:27:59 GMT+0200 2013
Tue Jun 6 15:27:22 GMT+0200 2014
Tue Jun 2 17:27:30 GMT+0200 2014 
并获取第一个(降序)或最后一个(升序)元素

编辑:因为我没有提供一个例子,或者因为人们不知道你可以对日期排序,所以投了2张反对票?这项工作:

var dates:Array = [
    "Tue Jun 2 17:59:54 GMT+0200 2013",
    "Tue Jun 5 18:00:10 GMT+0200 2013",
    "Tue Jun 1 12:27:14 GMT+0200 2013",
    "Tue Jun 3 17:26:58 GMT+0200 2013",
    "Tue Jun 9 17:27:49 GMT+0200 2013",
    "Tue Jun 1 13:27:39 GMT+0200 2015",
    "Tue Jun 3 12:27:59 GMT+0200 2013",
    "Tue Jun 6 15:27:22 GMT+0200 2014",
    "Tue Jun 2 17:27:30 GMT+0200 2014"
].map(function(s:String, i:int, a:Array):Date {
    return new Date(s);
}).sort(Array.NUMERIC | Array.DESCENDING);

var latest:Date = dates[0]; // Mon Jun 1 07:27:39 GMT-0400 2015
问题是OP没有明确说明他们使用的是什么类型的数据(字符串或
Date
对象),因此确切的解决方案代码未知

它们是物体吗?
如果是这样,您可以比较每个的属性。它将给出自1970年1月1日以来的毫秒数。最高的数字将是最近的

大致如下:

var mostRecentDate:Date = dateArray[0];
for(var i:int = 0; i < dateArray.length; i++){
    if(dateArray[i].time > mostRecentDate.time){
        mostRecentDate = dateArray[i];
    }
}
var mostRecentDate:Date=dateArray[0];
for(变量i:int=0;imostRecentDate.time){
mostRecentDate=dateArray[i];
}
}

在排序或比较时,日期对象就像一个简单的数字。你所要做的就是把它们当作数字来对待。从Cadin的回答中可以看出:

dateArray.sort();    
var oldestDate:Date = dateArray[0];
将为您提供最早的日期,同时:

dateArray.sort(Array.DESCENDING);    
var mostRecentDate:Date = dateArray[0];
我会给你最新的

对于LDMS,我得到的是:

var firstdate:Date = new Date();
var seconddate:Date = new Date();
var thirddate:Date = new Date();
seconddate.time = firstdate.time + 5000000;
thirddate.time = firstdate.time + 50000000;
trace(seconddate > firstdate)//true
trace(firstdate > seconddate)//false
trace(seconddate.time > firstdate.time)//true
var array:Array = [thirddate, firstdate, seconddate];
trace(array)
//Wed Jun 3 03:37:40 GMT-0400 2015,Tue Jun 2 13:44:20 GMT-0400 2015,Tue Jun 2 15:07:40 GMT-0400 2015
array.sort();
trace(array)
//Tue Jun 2 13:44:20 GMT-0400 2015,Tue Jun 2 15:07:40 GMT-0400 2015,Wed Jun 3 03:37:40 GMT-0400 2015
array.sort(Array.DESCENDING);
trace(array)
//Wed Jun 3 03:37:40 GMT-0400 2015,Tue Jun 2 15:07:40 GMT-0400 2015,Tue Jun 2 13:44:20 GMT-0400 2015

假设数组中充满了AS3本机
Date
对象,您只需执行以下操作:

array.sortOn("time",Array.DESCENDING);

trace("Most Recent:",array[0]);
不能使用
array.sort
(除非使用
array.NUMERIC
标志),因为它将对日期的字符串表示形式进行排序。因此,你一周中的所有日子都将被分组在一起,而不是实际日期


如果日期是字符串,则需要在排序之前将其转换为日期对象:

//assuming your posted array is in a var called 'stringArray'

var dateArray:Array = []; //a new array to hold the converted strings

for(var i:int=0;i<stringArray.length;i++){
    dateArray.push(new Date(stringArray[i]));
}

dateArray.sortOn("time",Array.DESCENDING);
trace("Most Recent Date:",dateArray[0]);
//假设您发布的数组位于名为“stringArray”的变量中
var-dateArray:Array=[]//用于保存已转换字符串的新数组

对于(var i:int=0;i数组中的日期是日期对象还是字符串?您只需要按时间属性对日期对象进行排序。哦,我更喜欢根据时间属性对数组进行排序。我没有想到。您可以使用数组的sortOn方法:
array.sortOn(“time”)
如果我没有弄错的话,Date对象本身的排序非常好,它们也支持比较运算符,而不使用它们的任何属性。例如:“dateArray[I].time>mostRecentDate.time”可以是简单的“dateArray[I]>mostRecentDate”我不认为你能做一个简单的
数组。在一个日期数组上排序
。它们确实像数字一样排序。非常确定你需要使用
sortOn(“time”,array.DESCENDING)
而不是
排序(array.DESCENDING)
。你真的试过吗?它只对你有效,因为你的小样本数据中日期的字符串表示形式恰好与数字排序相同。既然OP错误地接受了你的答案,你至少应该为未来的访问者更正它,他们不会费心去看除了接受的答案以外的任何东西。使用
sortOn(“time”,Array.DESCENDING)
就像我建议的那样,或者如果使用sort,则添加
Array.NUMERIC
标志。
sort(Array.NUMERIC | Array.DESCENDING)
var arr:Array = new Array(
    new Date("Tue Jun 2 17:59:54 GMT+0200 2013"),
    new Date("Tue Jun 5 18:00:10 GMT+0200 2013"),
    new Date("Tue Jun 1 12:27:14 GMT+0200 2013"),
    new Date("Tue Jun 3 17:26:58 GMT+0200 2013"),
    new Date("Tue Jun 9 17:27:49 GMT+0200 2013"),
    new Date("Tue Jun 1 13:27:39 GMT+0200 2015"),
    new Date("Tue Jun 3 12:27:59 GMT+0200 2013"),
    new Date("Tue Jun 6 15:27:22 GMT+0200 2014"),
    new Date("Tue Jun 2 17:27:30 GMT+0200 2014")
);

arr.sort(Array.DESCENDING);

trace("SORT:");
traceDates();

arr.sortOn("time",Array.DESCENDING);
trace("\nSORT ON:");
traceDates();



function traceDates(){
    for(var i:int=0;i<arr.length;i++){
        trace(" ",arr[i].fullYear + "-" + arr[i].month + "-" + arr[i].day);
    }
}

//OUTPUT:
/*
SORT:
  2013-5-3
  2013-5-0
  2013-5-0
  2013-5-6
  2013-5-1
  2013-5-1
  2014-5-1
  2015-5-1 //most recent date, second to LAST item in the array
  2014-5-5

SORT ON:
  2015-5-1  //June 1st is the most recent date (first item in the array)
  2014-5-5
  2014-5-1
  2013-5-0
  2013-5-3
  2013-5-1
  2013-5-1
  2013-5-0
  2013-5-6
 */