计算两个日期时间内的每一周,不足一周的按照一周计算
JavaScript
function splitWeeks(startDate, endDate) {
let start = new Date(startDate);
let end = new Date(endDate);
let weeks = [];
let currentDate = new Date(start);
let weekStart = new Date(currentDate);
let weekEnd = new Date(currentDate);
weekEnd.setDate(currentDate.getDate() + (7 - currentDate.getDay()));
while (currentDate <= end) {
if (weekEnd > end) {
weekEnd = new Date(end);
}
let weekDates = [];
let date = new Date(weekStart);
while (date <= weekEnd) {
let formattedDate = formatDate(date);
let dayOfWeek = getDayOfWeek(date);
weekDates.push({ date: formattedDate, weekday: dayOfWeek });
date.setDate(date.getDate() + 1);
}
weeks.push(weekDates);
currentDate.setDate(currentDate.getDate() + (7 - currentDate.getDay() + 1));
weekStart = new Date(currentDate);
weekEnd = new Date(currentDate);
weekEnd.setDate(currentDate.getDate() + (7 - currentDate.getDay()));
}
return weeks;
}
function formatDate(date) {
let year = date.getFullYear();
let month = (date.getMonth() + 1).toString().padStart(2, "0");
let day = date.getDate().toString().padStart(2, "0");
return `${year}-${month}-${day}`;
}
function getDayOfWeek(date) {
let dayOfWeek = date.getDay();
let weekdays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
return weekdays[dayOfWeek];
}
// 示例用法
let startDate = "2023-09-19";
let endDate = "2023-10-15";
let result = splitWeeks(startDate, endDate);
console.log(result);
Java
package com.ruoyi.business.utils;
import com.ruoyi.business.vo.XData;
import com.ruoyi.business.vo.YData;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
/**
* @author Tellsea
* @date 2023/9/15
*/
public class CourseUtils {
/**
* 纵坐标数据
*
* @return
*/
public static List<YData> getYData() {
List<YData> list = new ArrayList<>();
list.add(new YData().setValue(1L).setStart("08:00").setEnd("08:45").setName("第一节课"));
list.add(new YData().setValue(2L).setStart("08:55").setEnd("09:40").setName("第二节课"));
list.add(new YData().setValue(3L).setStart("09:55").setEnd("10:40").setName("第三节课"));
list.add(new YData().setValue(4L).setStart("10:50").setEnd("11:35").setName("第四节课"));
list.add(new YData().setValue(5L).setStart("11:45").setEnd("12:30").setName("第五节课"));
list.add(new YData().setValue(6L).setStart("13:30").setEnd("14:15").setName("第六节课"));
list.add(new YData().setValue(7L).setStart("14:25").setEnd("15:10").setName("第七节课"));
list.add(new YData().setValue(8L).setStart("15:25").setEnd("16:10").setName("第八节课"));
list.add(new YData().setValue(9L).setStart("16:20").setEnd("17:05").setName("第九节课"));
list.add(new YData().setValue(10L).setStart("17:15").setEnd("18:00").setName("第十节课"));
list.add(new YData().setValue(11L).setStart("18:30").setEnd("19:15").setName("第十一节课"));
list.add(new YData().setValue(12L).setStart("19:25").setEnd("20:10").setName("第十二节课"));
list.add(new YData().setValue(13L).setStart("20:20").setEnd("21:05").setName("第十三节课"));
return list;
}
/**
* 横坐标数据
* 获取时间段内的每一天
*
* @param startDate
* @param endDate
* @param week
* @return
*/
public static List<XData> getWeekList(String startDate, String endDate, int week) {
List<List<XData>> weekList = getWeekList(startDate, endDate);
if (!CollectionUtils.isEmpty(weekList)) {
return weekList.get(week);
}
return Collections.emptyList();
}
/**
* 计算两个日期时间内的每一周,不足一周的按照一周计算
*
* @param startDate
* @param endDate
* @return
*/
public static List<List<XData>> getWeekList(String startDate, String endDate) {
List<List<XData>> weeks = new ArrayList<>();
LocalDate start = LocalDate.parse(startDate);
LocalDate end = LocalDate.parse(endDate);
LocalDate current = start;
LocalDate weekStart = start.with(java.time.temporal.TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
LocalDate weekEnd = start.with(java.time.temporal.TemporalAdjusters.nextOrSame(java.time.DayOfWeek.SUNDAY));
while (current.isBefore(end) || current.isEqual(end)) {
if (weekEnd.isAfter(end)) {
weekEnd = end;
}
List<XData> weekDates = new ArrayList<>();
LocalDate date = weekStart;
while (date.isBefore(weekEnd) || date.isEqual(weekEnd)) {
String formattedDate = formatDate(date);
String dayOfWeek = getDayOfWeek(date);
weekDates.add(new XData(formattedDate, dayOfWeek));
date = date.plusDays(1);
}
weeks.add(weekDates);
current = current.plusDays(7 - current.getDayOfWeek().getValue() + 1);
weekStart = current.with(java.time.temporal.TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
weekEnd = current.with(java.time.temporal.TemporalAdjusters.nextOrSame(java.time.DayOfWeek.SUNDAY));
}
return weeks;
}
public static String formatDate(LocalDate date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return date.format(formatter);
}
public static String getDayOfWeek(LocalDate date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE", Locale.CHINA);
return date.format(formatter);
}
}