数组中date的最小值/最大值?

我如何从date数组中找出最小和最大date? 目前,我正在创build一个这样的数组:

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")) 

有没有一个内置的function来做到这一点,还是我写我自己的?

代码使用IE,FF,Chrome进行testing并正常工作:

 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; }); 

testing在Chrome 15.0.854.0开发

_.min_.max在date数组上工作; 如果你使用的是Lodash或Underscore,那么使用它们,如果你还没有使用Lodash(它提供了许多这样的实用function)。

例如,

 _.min([ new Date('2015-05-08T00:07:19Z'), new Date('2015-04-08T00:07:19Z'), new Date('2015-06-08T00:07:19Z') ]) 

将返回数组中的第二个date(因为它是最早的)。

由于date转换为UNIX纪元(数字),因此可以使用Math.max / min来查找这些:

 var maxDate = Math.max.apply(null, dates) // convert back to date object maxDate = new Date(maxDate) 

(仅在Chrome中进行testing,但应在大多数浏览器中运行)

 function sortDates(a, b) { return a.getTime() - b.getTime(); } var dates = []; dates.push(new Date("2011/06/26")) dates.push(new Date("2011/06/28")) dates.push(new Date("2011/06/25")) dates.push(new Date("2011/06/27")) var sorted = dates.sort(sortDates); var minDate = sorted[0]; var maxDate = sorted[sorted.length-1]; 

演示: http : //jsfiddle.net/AlienWebguy/CdXTB/

 var max_date = dates.sort(function(d1, d2){ return d2-d1; })[0]; 

这是一个特别好的方法来做到这一点(你可以使用其中一个对象属性来获取对象数组的最大值): Math.max.apply(Math,array.map(function(o){return oy;}))

这是本页面接受的答案: 查找对象数组中属性的最大值

使用Moment , Underscore和jQuery来迭代date数组。

示例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 ''; } } 

希望能帮助到你。

**使用Spread运算符| 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); 

这将给出arrays的最小date。

其简写Math.min.apply(null,ArrayOfdates);