날짜 배열에서 최소 및 최대 날짜를 어떻게 찾을 수 있습니까? 현재 다음과 같은 배열을 만들고 있습니다.
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"))
이 작업을 수행하는 내장 함수가 있습니까? 아니면 직접 작성해야합니까?
답변
코드는 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));
답변
다음과 같은 것 :
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에서 테스트 됨
답변
_.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')
])
배열의 두 번째 날짜를 반환합니다 (가장 빠른 날짜이기 때문).
답변
답변
날짜는 UNIX epoch (숫자)로 변환되므로 Math.max / min을 사용하여 찾을 수 있습니다.
var maxDate = Math.max.apply(null, dates)
// convert back to date object
maxDate = new Date(maxDate)
(Chrome에서만 테스트되었지만 대부분의 브라우저에서 작동합니다)
답변
** 분산 연산자 사용 | 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);
.