有一场景,在指定的某个时间段不能预约服务,预约日期从当前日期算起往后30天。
如果日期列表让前端渲染,就需要发送请求获取不能预约的日期列表,然后前端进行排除展示,作为小程序来说可能比较影响用户体验,既然都是发送一次请求,倒不如后端处理后直接返回给前端,前端省去了一个步骤。
/**
* 获取当前时间往后30天的日期(yyyy-mm-dd格式字符串)
* @param exculude 排除的日期列表
* @return
*/
public static List<String> getMonthOfDay(List<String> exculude){
Calendar begin = Calendar.getInstance();
begin.setTime(new Date());
List<String> dates= new ArrayList<>();
Long startTime = begin.getTimeInMillis();
Long oneDay = 1000 * 60 * 60 * 24l;
for (int i = 0;i<30;i++) {
Date d = new Date(startTime);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
dates.add(i,df.format(d));
startTime += oneDay;
}
if(!ObjectUtils.isEmpty(exculude)){
List<String> stringList = dates.stream().filter(o->!exculude.contains(o)).collect(Collectors.toList());
return stringList;
}
return dates;
}
测试
排除以下日期:2021-10-21,2021-10-31,2021-11-02,2021-11-03,2021-11-17
测试结果: