如何从日期数组中找出最小值和最大值?目前,我是这样创建数组的:
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 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、Firefox和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上进行测试
Array.reduce()
在IE中不可用。不过这个想法很酷。 - jfriend00getTime()
方法:dates.map(d => d.getTime())
。 - Mike de Klerk由于日期被转换为UNIX时间戳(数字),因此您可以使用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);
进行清理。
var dates = [];
dates.push(new Date("2011-06-25")); // I change "/" to "-" in "2011/06/25"
dates.push(new Date("2011-06-26")); // because conosle log write dates
dates.push(new Date("2011-06-27")); // using "-".
dates.push(new Date("2011-06-28"));
var min= dates.sort((a,b)=>a-b)[0], max= dates.slice(-1)[0];
console.log({min,max});
var max_date = dates.sort(function(d1, d2){
return d2-d1;
})[0];
如果您需要从字符串日期数组中获取最大或最小日期,并以字符串类型返回,请尝试以下方法:
const dates = ["2021-02-05", "2021-05-20", "2021-01-02"]
const min = dates.reduce((acc,date)=>{return acc&&new Date(acc)<new Date(date)?acc:date},'')
const max = dates.reduce((acc,date)=>{return acc&&new Date(acc)>new Date(date)?acc:date},'')
如果您已经在您的堆栈中使用了date-fns
max
函数,您也可以使用它:
import { max } from 'date-fns';
const dates = [
new Date('2022-01-01'),
new Date('2023-03-24'),
new Date('2021-12-31')
];
const maxDate = max(...dates);
console.log(maxDate); // Output: Wed Mar 24 2023 00:00:00 GMT-0400 (Eastern Daylight Time)
YYYY/MM/DD HH:MM:SS
,并且涉及到大量字符串,您会推荐使用字符串比较还是Number(new Date(dateString))
比较? - BlackPanther