数组中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);