【问题标题】:How can I get the nearest date through moment.js?如何通过 moment.js 获取最近的日期?
【发布时间】:2020-06-15 02:45:08
【问题描述】:

日期列表:

const datesToBeChecked = [ '2020-07-06', '2020-07-13', '2020-07-20' ]

检查日期

const dateToCheckFor = '2020-07-07';

如何使用 moment.js 获取日期数组中日期的最近日期?
在这种情况下,我希望函数返回 2020-07-13
我在网上找到了几个答案,但没有一个使用 YYYY-MM-DD 格式,也没有 moment.js。我想用moment.js来实现,谢谢!

【问题讨论】:

  • 我建议你看一下moment js的倒计时库,这可以帮助你进一步

标签: javascript momentjs


【解决方案1】:

您可以使用diff method 来比较日期。

const datesToBeChecked = ['2020-07-06', '2020-07-13', '2020-07-20']
const dateToCheckFor = '2020-07-07';

let nearestDate;

datesToBeChecked.forEach(date => {
  let diff = moment(date).diff(moment(dateToCheckFor), 'days');
  if (diff > 0) {
    if (nearestDate) {
      if (moment(date).diff(moment(nearestDate), 'days') < 0) {
        nearestDate = date;
      }
    } else {
      nearestDate = date;
    }
  }
});

console.log(nearestDate);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 正是我要去的!
  • 甚至可以 map() 创建一个差异数组,Math.min() 得到 indexOf()... 有点迂回的方式来获得相同的结果
【解决方案2】:

就我而言,我想找到最接近的值。如果它在数组中找不到更大的值,那么它应该从数组中返回最大的日期。此外,还应核实日期。

const findNearestDate = (arrayOfDates, findDate) => {
  try {
    let nearestDate, momentsDate;
    if (moment(findDate).isValid()) {
      momentsDate = arrayOfDates.map(date => {
        if (moment(date).isValid()) {
          date = moment(date);
          const diff = moment(date).diff(moment(findDate), 'seconds');
          if (diff >= 0) {
            if (nearestDate) {
              if (moment(date).diff(moment(nearestDate), 'seconds') < 0) {
                nearestDate = date;
              }
            } else {
              nearestDate = date;
            }
          }
        } else {
          date = false;
        }

        return date;
      }).filter(isValid => isValid);
    }

    if (!nearestDate) {
      nearestDate = moment.max(momentsDate);
    }
    return nearestDate.format('YYYY-MM-DD HH:mm:ss');
  } catch (error) {
    console.error(`Error In findNearestDate ${error}`);
    return false;
  }
};


const datesToBeChecked = ['1998-03-16 10:15:00', '1998-03-16 10:15:10', '1998-03-16 09:00:00', '1998-03-16 10:00:00', '1998-03-16 10:00:00', '1998-03-16 10:20:00', '1998-03-16 110:20:00'];

// Remove Below Line if you want to see the warnings
console.warn = () => {};

document.write('1998-03-16 10:15:00 ' + '=>' + findNearestDate(datesToBeChecked, '1998-03-16 10:15:00') + '<br/>');
document.write('1998-03-16 10:18:00 ' + '=>' + findNearestDate(datesToBeChecked, '1998-03-16 10:18:00') + '<br/>');
document.write('1998-03-16 10:23:00 ' + '=>' + findNearestDate(datesToBeChecked, '1998-03-16 21:23:00') + '<br/>');
document.write('1998-03-16 210:23:00 ' + '=>' + findNearestDate(datesToBeChecked, '1998-03-16 210:23:00') + '<br/>');
document.write('1998-03-16 09:23:00 ' + '=>' + findNearestDate(datesToBeChecked, '1998-03-16 09:23:00') + '<br/>');
document.write('1998-03-16 10:20:00 ' + '=>' + findNearestDate(datesToBeChecked, '1998-03-16 10:20:00') + '<br/>');
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2012-01-04
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多