【发布时间】:2021-04-30 01:46:14
【问题描述】:
我有一个March 1st 或May 2nd 格式的日期数组,我想使用moment.js 遍历这些日期并找出nodejs 中最接近当前日期的日期。
【问题讨论】:
-
该格式没有提供足够的信息来查找最接近当前日期的日期。我们还需要有关年份的信息。你能提供更多关于这方面的信息吗?
我有一个March 1st 或May 2nd 格式的日期数组,我想使用moment.js 遍历这些日期并找出nodejs 中最接近当前日期的日期。
【问题讨论】:
您必须循环数组中的每个元素,并计算数组元素日期与现在 (moment()) 之间的绝对差值 (Math.abs())。
您必须指定数组元素的格式,在这种情况下矩格式为MMMM Do。
const arr = ['March 1st', 'April 1st', 'April 28th', 'May 1st', 'May 2nd', 'September 26th'];
let lastDiff;
let nearest;
for (const date of arr) {
const diff = Math.abs(moment(date, 'MMMM Do').diff(moment(), 'days'));
if (lastDiff === undefined || lastDiff > diff) {
lastDiff = diff;
nearest = date;
}
}
console.log(nearest)
console.log(moment(nearest, 'MMMM Do').format())
此方法认为当年与现在相同。
【讨论】:
我们可以使用 Array.reduce 来找到离当前日期最近的日期。我们解析每个日期以获取一个时刻实例,然后获取与当前日期的绝对偏移量。如果这低于最接近的值,我们将其替换。
const dates = ["January 1st", "March 28th", "April 12th", "April 25th", "May 2nd", "September 8th"];
const now = moment();
const nearestDate = dates.reduce((nearest, dateStr) => {
const momentDate = moment(dateStr, "MMMM D");
const timeFromNow = Math.abs(momentDate - now);
const nearestTimeFromNow = Math.abs(nearest - now);
if (!nearestTimeFromNow || timeFromNow < nearestTimeFromNow) {
nearest = momentDate;
}
return nearest;
})
console.log("Nearest date to now:", nearestDate.format("MMMM Do"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
【讨论】: