回答:
コードはIE、FF、Chromeでテストされ、適切に動作します。
var dates=[];
dates.push(new Date("2011/06/25"))
dates.push(new Date("2011/06/26"))
dates.push(new Date("2011/06/27"))
dates.push(new Date("2011/06/28"))
var maxDate=new Date(Math.max.apply(null,dates));
var minDate=new Date(Math.min.apply(null,dates));
dates.push('2011/06/05')
。文字列を使用すると、配列を簡単にソートでき、最初と最後のメンバー値が返され、必要に応じて日付に変換されます。
YYYY/MM/DD HH:MM:SS
があり、多くの文字列が含まれている場合、文字列の比較またはNumber(new Date(dateString))
比較を勧めますか?
何かのようなもの:
var min = dates.reduce(function (a, b) { return a < b ? a : b; });
var max = dates.reduce(function (a, b) { return a > b ? a : b; });
Chrome 15.0.854.0 devでテスト済み
Array.reduce()
IE9より前のIEでは使用できません。でもクールなアイデア。
function foreach(func, array) { for(var i = 0; i != array.length; ++i) { func(array[i]); } } function reduce(combine, base, array) { foreach(function(element) { base = combine(base, element); }, array); return base; }
_.min
そして、_.max
日付の配列で動作します。LodashまたはUnderscoreを使用している場合はこれらを使用し、まだ使用していない場合は(これらのような多くのユーティリティ関数を提供する)Lodashの使用を検討してください。
例えば、
_.min([
new Date('2015-05-08T00:07:19Z'),
new Date('2015-04-08T00:07:19Z'),
new Date('2015-06-08T00:07:19Z')
])
配列の2番目の日付を返します(それが最も古いため)。
**スプレッドオペレーターを使用| ES6 **
let datesVar = [ 2017-10-26T03:37:10.876Z,
2017-10-27T03:37:10.876Z,
2017-10-23T03:37:10.876Z,
2015-10-23T03:37:10.876Z ]
Math.min(...datesVar);
これにより、配列から最小の日付が得られます。
その短縮形Math.min.apply(null、ArrayOfdates);
ONELINER:
var min= dates.sort((a,b)=>a-b)[0], max= dates.slice(-1)[0];
結果として変数min
とmax
、複雑さO(nlogn)、編集可能な例はここにあります。配列に(のようなnull
)日付のない値がある場合は、まずでそれを消去しdates=dates.filter(d=> d instanceof Date);
ます。
上記の回答は空白/未定義の値を処理しないため、これを修正しました。以下のコードを使用して空白をNAに置き換えました:
function getMax(dateArray, filler) {
filler= filler?filler:"";
if (!dateArray.length) {
return filler;
}
var max = "";
dateArray.forEach(function(date) {
if (date) {
var d = new Date(date);
if (max && d.valueOf()>max.valueOf()) {
max = d;
} else if (!max) {
max = d;
}
}
});
return max;
};
console.log(getMax([],"NA"));
console.log(getMax(datesArray,"NA"));
console.log(getMax(datesArray));
function getMin(dateArray, filler) {
filler = filler ? filler : "";
if (!dateArray.length) {
return filler;
}
var min = "";
dateArray.forEach(function(date) {
if (date) {
var d = new Date(date);
if (min && d.valueOf() < min.valueOf()) {
min = d;
} else if (!min) {
min = d;
}
}
});
return min;
}
console.log(getMin([], "NA"));
console.log(getMin(datesArray, "NA"));
console.log(getMin(datesArray));
これは、これを行うための特に優れた方法です(オブジェクトプロパティの1つを使用して、オブジェクトの配列の最大値を取得できます)。 Math.max.apply(Math,array.map(function(o){return o.y;}))
これは、このページで受け入れられている回答です。 オブジェクトの配列内の属性の最大値を見つける
Moment、Underscore、jQueryを使用して、日付の配列を反復処理します。
JSONの例:
"workerList": [{
"shift_start_dttm": "13/06/2017 20:21",
"shift_end_dttm": "13/06/2017 23:59"
}, {
"shift_start_dttm": "03/04/2018 00:00",
"shift_end_dttm": "03/05/2018 00:00"
}]
JavaScript:
function getMinStartDttm(workerList) {
if(!_.isEmpty(workerList)) {
var startDtArr = [];
$.each(d.workerList, function(index,value) {
startDtArr.push(moment(value.shift_start_dttm.trim(), 'DD/MM/YYYY HH:mm'));
});
var startDt = _.min(startDtArr);
return start.format('DD/MM/YYYY HH:mm');
} else {
return '';
}
}
それが役に立てば幸い。