每天

首先效验传过来的时间数据,这里传过来的是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;
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐