답변:
코드는 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')
])
배열의 두 번째 날짜를 반환합니다 (가장 빠른 날짜이기 때문).
** 분산 연산자 사용 | 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);
원 라이너 :
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));
이것은이를 수행하는 특히 좋은 방법입니다 (객체 속성 중 하나를 사용하여 최대 객체 배열을 얻을 수 있음). Math.max.apply(Math,array.map(function(o){return o.y;}))
다음은이 페이지에 대한 답변 입니다. 객체 배열에서 속성의 최대 값 찾기
사용하는 순간 , 밑줄 및 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"
}]
자바 스크립트 :
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 '';
}
}
도움이되기를 바랍니다.