2

配列があります:

var a = new Array();

次のような日付エントリが含まれています:'2012-09-1209:20'など

javascriptを使用して最小日と最大日を見つける必要があります。このコードは時間値では機能しません。

var minT = Math.min.apply(Math, a);
var maxT = Math.max.apply(Math, a);

JavaScriptでこの問題を解決するにはどうすればよいですか?私はこの言語の経験があまりないので、かなり複雑なようです。

4

5 に答える 5

5

配列に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];
于 2012-09-12T14:59:19.527 に答える
3

Math.min/max文字列ではなく、数値のみを比較します。日付を表すためにそれらを使用するのではなく、Dateオブジェクトを使用してください-それらは内部のタイムスタンプ番号によって比較されます。それでも、max / minはその内部数値を返すので、それをaに戻す必要があります(配列内の日付のMin / MaxをDate参照してください):

ただし、文字列を使用する場合、または再作成された日付を使用できない場合は、forループまたはES5.1のみのイテレータメソッドを使用して、配列を手動で実行する必要があります.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];
于 2012-09-12T14:59:16.187 に答える
1

これを試して:

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

以前の質問で見つけました

于 2012-09-12T14:57:34.937 に答える
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);

免責事項:この 2 番目の方法は、すべての日付文字列が同じ形式である場合にのみ機能します。配列に異なる形式の日付がある場合、この関数は使用できません。

于 2012-09-12T14:57:10.880 に答える
0

配列はDateオブジェクトで埋められていますか?もしそうなら、それらを使用してそれらを比較し、多くの既知のアルゴリズムの1つを使用してそれらをソートします。

そうでない場合は、Dateオブジェクトを使用して配列を再作成します。各オブジェクトに1つずつ作成し、上記のように配列を並べ替えます。

于 2012-09-12T14:57:46.913 に答える