繁体   English   中英

查找最短和最长日期

[英]Find minimum and maximum dates

有一个数组:

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'那样'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对象 - 它们将按内部时间戳编号进行比较。 仍然,最大/最小将返回该内部数字,因此您需要将其转换回Date (请参阅数组中的最小/最大日期? ):

但是,如果要使用字符串或不能使用重新创建的日期,则需要手动运行数组 - 使用for循环或仅使用ES5.1的迭代器方法.reduce .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 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);

免责声明:第二种方法仅在所有日期字符串采用相同格式时才有效,如果阵列中的格式日期不同,则无法使用此功能。

尝试这个:

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

我在之前的问题上找到了它

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

如果没有,请使用Date对象重新创建数组,每个对象一个,并按照我上面的说法,通过对数组进行排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM