如何遍历日期对象数组并找出最早与最晚日期?
找出日期数组中的最早和最晚日期
首先注意你给出的数组存在语法错误,日期字符串必须用引号包裹,正确的数组定义应该是:
const datesList = ["2022-07-15T19:41:12.620Z", "2022-07-20T11:21:52.596Z", "2022-07-13T11:21:50.596Z"];
下面提供几种可行的实现方式:
方法一:修正后的forEach循环实现
如果坚持用forEach,核心是先初始化最早、最晚日期,再逐个比较更新:
// 初始化最早和最晚日期为数组第一个元素的Date对象 let earliestDate = new Date(datesList[0]); let latestDate = new Date(datesList[0]); datesList.forEach(dateStr => { const currentDate = new Date(dateStr); // 比当前最早日期更早,就更新 if (currentDate < earliestDate) { earliestDate = currentDate; } // 比当前最晚日期更晚,就更新 if (currentDate > latestDate) { latestDate = currentDate; } }); console.log("最早日期:", earliestDate); console.log("最晚日期:", latestDate);
方法二:用时间戳结合Math方法简化代码
这种写法更简洁,不需要手动写遍历逻辑:
// 把所有日期转成时间戳(数字格式,方便比较大小) const timestamps = datesList.map(date => Date.parse(date)); // 找出最小、最大时间戳 const earliestTimestamp = Math.min(...timestamps); const latestTimestamp = Math.max(...timestamps); // 转回Date对象 const earliestDate = new Date(earliestTimestamp); const latestDate = new Date(latestTimestamp); console.log("最早日期:", earliestDate); console.log("最晚日期:", latestDate);
方法三:用reduce一次遍历完成计算
reduce可以在一次遍历中同时算出最早和最晚日期:
const { earliest, latest } = datesList.reduce((acc, dateStr) => { const currentDate = new Date(dateStr); return { earliest: currentDate < acc.earliest ? currentDate : acc.earliest, latest: currentDate > acc.latest ? currentDate : acc.latest }; }, { // 初始值设为数组第一个元素的Date对象 earliest: new Date(datesList[0]), latest: new Date(datesList[0]) }); console.log("最早日期:", earliest); console.log("最晚日期:", latest);
内容的提问来源于stack exchange,提问作者Fernanda
相关产品推荐
相关产品推荐

