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