从数组中查找最新日期

时间:2015-06-02 16:50:39

标签: arrays actionscript-3 date

如何从数组中找到最近的日期,如下所示?

CashRegister

4 个答案:

答案 0 :(得分:1)

他们是Date个对象吗? 如果是这样,您可以比较每个的time属性。它将为您提供自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];
    }
}

答案 1 :(得分:1)

在排序或比较时,日期对象的作用类似于简单数字。你所要做的就是将它们视为数字。所以从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

答案 2 :(得分:1)

假设您的数组中充满了AS3本机Date对象,您可以这样做:

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

trace("Most Recent:",array[0]);

您不能使用array.sort(除非您使用Array.NUMERIC标志),因为它将对日期的字符串表示形式进行排序。因此,将一周中的所有日期组合在一起而不是实际日期。

如果您的日期是字符串,那么您需要在排序之前将它们转换为Date对象:

//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]);

为了在一个具体的例子中显示这个,这里是你发布的日期 - 复制粘贴此代码以产生相同的结果:

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
 */

答案 3 :(得分:-1)

Sort the array并抓住第一个(降序)或最后一个(升序)元素。

编辑: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对象)所以确切的解决方案代码是未知的。