有一个数组:
var a = new Array();
它包含如下日期条目:'2012-09-12 09:20'等
我需要使用javascript查找最短和最长日期。此代码不适用于时间值。
var minT = Math.min.apply(Math, a);
var maxT = Math.max.apply(Math, a);
如何在javascript中解决此问题?这似乎很复杂,因为我对这种语言不是很有经验。
答案 0 :(得分:4)
如果您的数组包含Date
个对象,那么这应该可行。如果它只包含'2012-09-12 09:20'
之类的字符串,那么您可以对它们进行排序,并获取第一个和最后一个元素。
a.sort(function(a, b){
return Date.parse(a) - Date.parse(b);
});
var maxT = a[a.length-1];
var minT = a[0];
答案 1 :(得分:3)
Math.min
/ max
仅比较数字,而不是字符串。不要使用它们来表示日期,而是使用Date
objects - 它们将按内部时间戳编号进行比较。尽管如此,最高/分钟将返回该内部数字,因此您需要将其转换回Date
(请参阅Min/Max of dates in an array?):
但是,如果要使用字符串或不能使用重新创建的日期,则需要手动运行数组 - 使用for循环或仅使用ES5.1的迭代器方法{{3 }}:
var min = datestrings.reduce(function(min, cur) {
return cur < min ? cur : min;
});
// is equivalent to
var min = datestrings[0];
for (var i=1; i<datestrings.length; i++)
if (datestrings[i] < min)
min = datestrings[i];
如果您的代码不需要高效,您也可以对数组进行排序并获取第一个和最后一个值。默认的字母数字排序将为您的日期格式执行,因此这非常简单:
datestrings.sort();
var min = datestrings[0],
max = datestrings[datestrings.lengh-1];
答案 2 :(得分:1)
这应该这样做:
var maxT=new Date(Math.max.apply(null,a));
var minT=new Date(Math.min.apply(null,a));
如果你必须使用字符串,你可以定义一个函数:
function maxDate(data){
var max = '';
for(var i=0; i<data.length; i++)
if(data[i]>max)
max=data[i];
return max;
}
然后:
var maxT=maxDate(a);
免责声明:第二种方法仅在所有日期字符串格式相同的情况下才有效,如果您的数组中有不同的格式日期,则无法使用此功能。
答案 3 :(得分:1)
试试这个:
var maxDate=new Date(Math.max.apply(null,dates));
var minDate=new Date(Math.min.apply(null,dates));
我在较早的question
上找到了它答案 4 :(得分:0)
数组是否填充了Date对象? 如果是这样,请使用它们进行比较,并使用许多已知算法之一对它们进行排序。
如果没有,请使用Date对象重新创建数组,每个对象一个,并按照我上面的说法,通过对数组进行排序。