[英]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.