如何在JavaScript中从日期数组获取最新日期?
解决方案
原生JavaScript实现
无需依赖任何第三方库,手动解析日期格式并完成比较、格式化即可:
function getLatestDate(dates) { // 把DD/MM/YYYY格式的字符串转为Date对象 const parseDate = (dateStr) => { const [day, month, year] = dateStr.split('/').map(Number); // 注意JS的Date月份是0索引,需要减1 return new Date(year, month - 1, day); }; // 遍历找出最新的日期对象和原字符串 let latestDateObj = parseDate(dates[0]); dates.forEach(dateStr => { const currentDate = parseDate(dateStr); if (currentDate > latestDateObj) { latestDateObj = currentDate; } }); // 格式化为补零的DD/MM/YYYY格式 const formatDate = (dateObj) => { const day = String(dateObj.getDate()).padStart(2, '0'); const month = String(dateObj.getMonth() + 1).padStart(2, '0'); const year = dateObj.getFullYear(); return `${day}/${month}/${year}`; }; return formatDate(latestDateObj); } const dates = ["22/1/2022","22/7/2022","9/10/2018"]; console.log(getLatestDate(dates)); // 输出 "22/07/2022"
使用date-fns实现
date-fns提供了开箱即用的日期解析、比较和格式化方法,代码更简洁:
先安装依赖:
npm install date-fns
实现代码:
import { parse, format, max } from 'date-fns'; function getLatestDate(dates) { // 按DD/MM/YYYY格式解析所有日期为Date对象 const dateObjects = dates.map(dateStr => parse(dateStr, 'dd/MM/yyyy', new Date())); // 获取最新的日期对象 const latestDateObj = max(dateObjects); // 格式化为补零的目标格式 return format(latestDateObj, 'dd/MM/yyyy'); } const dates = ["22/1/2022","22/7/2022","9/10/2018"]; console.log(getLatestDate(dates)); // 输出 "22/07/2022"
使用Moment.js实现
Moment.js对自定义日期格式的处理同样便捷:
先安装依赖:
npm install moment
实现代码:
import moment from 'moment'; function getLatestDate(dates) { // 按DD/MM/YYYY格式解析所有日期 const momentDates = dates.map(dateStr => moment(dateStr, 'DD/MM/YYYY')); // 获取最新的日期实例 const latestMoment = moment.max(momentDates); // 格式化为补零的目标格式 return latestMoment.format('DD/MM/YYYY'); } const dates = ["22/1/2022","22/7/2022","9/10/2018"]; console.log(getLatestDate(dates)); // 输出 "22/07/2022"
内容的提问来源于stack exchange,提问作者SDK
相关产品推荐
相关产品推荐

