建议下一个可用日期(最近)但不建议数组中的日期
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.
我有一个数组 exdate 的列表,其中有一些日期。我想排除这些日期并建议从今天开始的下一个可用日期。日期不应该是随机的。
const exdate = ["24/08/2020", "8/8/2020"] //dates needs to be excluded [DD/MM/YYYY]
新生成的日期是“25/08/2020”,这是最接近的日期,不在数组中。
这个
在 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.