如何从一系列日期中找出最小和最大日期?目前,我正在创建一个这样的数组:
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"))
Run Code Online (Sandbox Code Playgroud)
是否有内置函数来执行此操作,还是我自己编写?
And*_* D. 128
代码使用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));
Run Code Online (Sandbox Code Playgroud)
小智 72
就像是:
var min = dates.reduce(function (a, b) { return a < b ? a : b; });
var max = dates.reduce(function (a, b) { return a > b ? a : b; });
Run Code Online (Sandbox Code Playgroud)
在Chrome 15.0.854.0 dev上测试过
小智 32
与 apply 相同,现在使用spread:
const maxDate = new Date(Math.max(...dates));
Run Code Online (Sandbox Code Playgroud)
(可能是对最佳答案的评论)
Mar*_*ery 28
_.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')
])
Run Code Online (Sandbox Code Playgroud)
将返回数组中的第二个日期(因为它是最早的).
Ric*_*asi 11
由于日期转换为UNIX纪元(数字),您可以使用Math.max/min来查找:
var maxDate = Math.max.apply(null, dates)
// convert back to date object
maxDate = new Date(maxDate)
Run Code Online (Sandbox Code Playgroud)
(仅在chrome中测试,但在大多数浏览器中都可以使用)
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];
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/AlienWebguy/CdXTB/
**使用Spread Operators | 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);
Run Code Online (Sandbox Code Playgroud)
这将给出数组的最小日期.
它的简写为Math.min.apply(null,ArrayOfdates);
单线:
var min= dates.sort((a,b)=>a-b)[0], max= dates.slice(-1)[0];
Run Code Online (Sandbox Code Playgroud)
导致变量min和max,复杂度O(nlogn),可编辑示例here。如果您的数组具有无日期值(如null),请先将其清理干净dates=dates.filter(d=> d instanceof Date);。
var min= dates.sort((a,b)=>a-b)[0], max= dates.slice(-1)[0];
Run Code Online (Sandbox Code Playgroud)
var max_date = dates.sort(function(d1, d2){
return d2-d1;
})[0];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104686 次 |
| 最近记录: |