簡體   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