查找最短和最长日期

Find minimum and maximum dates

本文关键字:日期 查找      更新时间:2023-09-26

有一个数组:

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中解决此问题?这似乎很复杂,因为我对这种语言不是很有经验。

如果您的数组包含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];

Math.min/max只比较数字,不比较字符串。不要使用它们来表示日期,而是使用Date对象——它们将根据内部时间戳编号进行比较。尽管如此,max/min将返回该内部数字,因此您需要将其转换回Date(请参阅数组中日期的最小/最大值?):

但是,如果您想使用字符串或不能使用重新创建的Date,则需要手动运行该数组-使用for循环或ES5.1-only迭代器方法.reduce():

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

试试这个:

var maxDate=new Date(Math.max.apply(null,dates));
var minDate=new Date(Math.min.apply(null,dates));

我在前面的一个问题

中找到了它

这应该做到:

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

免责声明:只有当所有日期字符串的格式相同时,第二种方法才有效,如果数组中的日期格式不同,则无法使用此函数。

数组中是否填充了Date对象?如果是,请使用它们进行比较,并使用许多已知算法中的一种进行排序。

如果没有,请使用Date对象重新创建数组,每个对象一个,然后按照上面所说的对数组进行排序。