【问题标题】:Moment get next date in arrays of dates时刻获取日期数组中的下一个日期
【发布时间】:2021-04-30 01:46:14
【问题描述】:

我有一个March 1stMay 2nd 格式的日期数组,我想使用moment.js 遍历这些日期并找出nodejs 中最接近当前日期的日期。

【问题讨论】:

  • 该格式没有提供足够的信息来查找最接近当前日期的日期。我们还需要有关年份的信息。你能提供更多关于这方面的信息吗?

标签: node.js momentjs


【解决方案1】:

您必须循环数组中的每个元素,并计算数组元素日期与现在 (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())

此方法认为当年与现在相同。

【讨论】:

    【解决方案2】:

    我们可以使用 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"));
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"&gt;&lt;/script&gt; 

    【讨论】:

      猜你喜欢
      • 2013-10-06
      • 2020-01-06
      • 1970-01-01
      • 2016-03-24
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      相关资源
      最近更新 更多