我有一个约会管理方案,其中有一个人的availableWeekDays
列表字段,可以在工作日的工作日进行预订。例如,如果星期一有空,我在availableWeekDays列表中的值为1。
我已经使用DateTime
将currentDate存储在DateTime.now()
变量中。
我要做的是首先看一下今天的工作日是否与某人的availableWeekDay相匹配。如果是,则bookingDate有效,否则我必须与人的工作日一起寻找最近的将来日期。我尝试了以下解决方案,但由于我正在使用第一个索引,因此它可以工作一周。
void main() {
DateTime bookingDate = DateTime.now();
int availableWeekDays = [1,4,7];
getDate(){
if(bookingDate.weekday == availableWeekDays[0]){
print("Available on $bookingDate ");
} else {
bookingDate = bookingDate.add(Duration(days: 1));
getDate();
}
}
getDate();
}
我想找到列表中所有平日中最接近的将来日期。
最佳答案
DateTime findNearestWeekday(List<int> availableWeekdays) {
assert(availableWeekdays.isNotEmpty);
var date = DateTime.now();
final weekday = date.weekday;
for (var num in availableWeekdays) {
if (num == date.weekday) {
return date;
} else if (date.weekday < num) {
return date.add(Duration(days: num - weekday));
}
}
/// I have assumed that you will always have a sorted list of available
/// weekdays, in case you do not have a sorted list, either you can sort
/// the list first or just use this line (instead of the last one),
///
/// ```dart
/// import 'dart:math'; /// Add on Top of file.
///
/// return date.add(Duration(days: 7 - weekday + availableWeekdays.reduce(min)))
/// ```
///
/// I will prefer to pre sort the array before storing it somewhere,
/// because it will add an additional dependency dart:math
return date.add(Duration(days: 7 - weekday + availableWeekdays[0]));
}
关于algorithm - 如何查找从现在开始到特定工作日的最近的将来日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63460102/