建议下一个可用日期(最近)但不建议数组中的日期

Suggest Next available date(closest) but don't suggest dates which are in array

我有一个数组 exdate 的列表,其中有一些日期。我想排除这些日期并建议从今天开始的下一个可用日期。日期不应该是随机的。

const exdate = ["24/08/2020", "8/8/2020"] //dates needs to be excluded [DD/MM/YYYY]

新生成的日期是“25/08/2020”,这是最接近的日期,不在数组中。

这个 有一个问题是使用 math.random 函数生成随机日期,但我的情况不同。

在 while 循环内迭代并检查 exdate 是否包含当前日期。如果它不包含日期,则将 1 天添加到当前日期并再次检查。如果当前日期不在 exdate 数组中,则退出 while 循环并打印该值。

您可能会考虑的一件事:日期的预期格式是什么?你应该确保它保持一致。例如不要在月份前使用前导 0。我的回答应该能为您指明正确的方向。

exdate = ['24/8/2020', '8/8/2020'];


let currDate = new Date();
let dd = currDate.getDate();
let mm = currDate.getMonth() + 1;
let y = currDate.getFullYear();
let dateFormat = dd + '/' + mm + '/' + y;
while (true) {
  dd = currDate.getDate();
  mm = currDate.getMonth() + 1;
  y = currDate.getFullYear();
  dateFormat = dd + '/' + mm + '/' + y;
  if (!exdate.includes(dateFormat)) break;
  currDate.setDate(currDate.getDate() + 1);

}
console.log(dateFormat);

我认为这段代码可以满足您的需求,而且非常简单:

import moment from "moment";

// Constants
const dateFormat = 'DD/MM/YYYY'

// Utils
const strToDate = (date) => moment(date, dateFormat)
const dateToStr = (date) => date.format(dateFormat)
const sortByMoment = (a, b) => b.diff(a)
const incrementDate = (date) => date.add(1, 'day')
const isToday = (date) => moment().isSame(date, 'day')

// Data
const exdate = ["17/08/2020", "24/08/2020", "8/8/2020"];

// Implementation
const sortNewestToOldest = (data) => data
  .map(strToDate)
  .sort(sortByMoment)
  
const nextAvailableDate = ([head]) => isToday(head) ? [dateToStr(incrementDate(head))] : [dateToStr(moment())]

nextAvailableDate 检查今天的日期是否在 exdate 列表中,如果是 return 明天,否则 return 今天。如果您在那里还有需要安排的未来约会,您可以将 isToday 扩展为 isTodayOrInTheFuture。您需要的矩函数都可以找到 here.