Java后端按每周和每天统计数据
每天首先效验传过来的时间数据,这里传过来的是vue的日期组件所产生的的时间范围效验代码:private List<LocalDate> getStartAndEnd(String createDate){LocalDate preDate;LocalDate endDate;if (!StringUtils.isEmpty(createDate)){String[] split = c
·
每天
首先效验传过来的时间数据,这里传过来的是vue的日期组件所产生的的时间范围
效验代码:
private List<LocalDate> getStartAndEnd(String createDate){
LocalDate preDate;
LocalDate endDate;
if (!StringUtils.isEmpty(createDate)){
String[] split = createDate.split(",");
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
preDate = LocalDate.parse(split[0], dateTimeFormatter);
endDate = LocalDate.parse(split[1], dateTimeFormatter);
}else {
preDate = LocalDate.now().minusMonths(3);
endDate = LocalDate.now();
}
List<LocalDate> localDates = new ArrayList<>();
localDates.add(preDate);
localDates.add(endDate);
return localDates;
}
获取到到时间范围后通过数据库查询
SELECT
DATE_FORMAT( create_date, '%j' ) dayNum,
count( id ) count ,
create_date dateTime
FROM
表名
GROUP BY
dayNum
DATE_FORMAT 函数用法自行百度
需要将查询出来的数据进行补全,没有日期的中间没有日期的全部补0
/**
* 获取间隔的日期列表
*
* @param preDate 开始日期
* @param endDate 截止日期
* @return
*/
private List<LocalDate> getRangeDays(LocalDate preDate, LocalDate endDate) {
List<LocalDate> dates = new ArrayList<>();
//间隔的天数
long betweenDays = ChronoUnit.DAYS.between(preDate, endDate);
if (betweenDays < 1) {
//开始日期<=截止日期
return dates;
}
//创建一个从开始日期、每次加一天的无限流,限制到截止日期为止
Stream.iterate(preDate, c -> c.plusDays(1))
.limit(betweenDays + 1)
.forEach(dates::add);
return dates;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)