【问题标题】:Suggest Next available date(closest) but don't suggest dates which are in array建议下一个可用日期(最近),但不建议数组中的日期
【发布时间】:2020-08-24 06:05:10
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您可以首先使用该格式生成今天的日期,然后测试它是否在数组中。增加一天,直到找到缺失的日期。这里有很多关于格式化和添加日期的问题,您尝试过什么?
  • @RobG 我尝试了上一篇文章中的代码,但它正在生成随机日期

标签: javascript arrays datetime data-structures logic


【解决方案1】:

在 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);

【讨论】:

    【解决方案2】:

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

    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 列表中,如果是则明天返回,否则今天返回。如果您还有需要适应的未来日期,可以将isToday 扩展为isTodayOrInTheFuture。你需要的moment函数都可以在here找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2012-03-20
      • 1970-01-01
      相关资源
      最近更新 更多