首页 > 编程语言 >【JavaScript】JavaScript、Java 计算两个日期时间内的每一周,不足一周的按照一周计算

【JavaScript】JavaScript、Java 计算两个日期时间内的每一周,不足一周的按照一周计算

时间:2023-09-25 17:03:10浏览次数:44  
标签:Java java 一周 JavaScript list add YData date new


计算两个日期时间内的每一周,不足一周的按照一周计算

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);
    }
}


标签:Java,java,一周,JavaScript,list,add,YData,date,new
From: https://blog.51cto.com/u_15269008/7597275

相关文章

  • 《Java核心技术卷1》学习笔记汇总
    前言转部门了,而且换语言了,开始写接口了,虽然也会用到CPP,但是主要语言是JAVA,因此从零开始学JAVA吧。目录Java程序设计描述Java程序设计环境Java的基本程序设计结构对象与类继承接口、lambda表达式与内部类异常、断言和日志泛型程序设计集合图形用户界面程序设计Swing用户界面组件并发......
  • java项目开发常用配置文件模板
    mybatisconfig文件1<?xmlversion="1.0"encoding="UTF-8"?>2<!DOCTYPEconfiguration3PUBLIC"-//mybatis.org//DTDConfig3.0//EN"4"http://mybatis.org/dtd/mybatis-3-config.dtd">5......
  • Java内存模型
    JavaMemoryModel,JMM是一种规范,定义了程序中各个变量的访问规则,以及在某个线程中对这些变量进行访问时需要遵守的同步策略,所以其目的是解决多线程正确执行的问题。Java内存模型确保了多线程程序的可见性、有序性和原子性;主要内容包括:主内存(MainMemory):所有变量都存储在主内......
  • Java中的线程池的线程数量如何确定?
    可能很多人都看到过一个线程数设置的理论:CPU密集型的程序-核心数+1I/O密集型的程序-核心数*2不会吧,不会吧,真的有人按照这个理论规划线程数?线程数和CPU利用率的小测试抛开一些操作系统,计算机原理不谈,说一个基本的理论(不用纠结是否严谨,只为好理解):一个CPU核心,单......
  • Java基础
    equals()方法equals()方法的作用是比较两个字符串是否相等。为避免空指针异常finall关键字final关键字:可以修饰,变量,方法,类。final修饰的类无法被继承。final修饰的方法无法被覆盖,无法被重写。当final修饰的变量没有赋值时,允许第一次赋值,第二次报错。final......
  • Java数组
    Arrayjava语言中数组是一种引用数据类型。不属于基本数据类型。数组的父类是object。数组是一个容器,数组是一个数据的集合。数组中可以储存基本数据类型的数据,也可以储存引用数据类型的数据。数组是引用类型,所以数组对象储存在堆内存当中的。数组当中储存的是Java对象的话,实......
  • Java SE 21 新增特性
    JavaSE21新增特性作者:Grey原文地址:博客园:JavaSE21新增特性CSDN:JavaSE21新增特性源码源仓库:Github:java_new_features镜像仓库:GitCode:java_new_featuresRecordPatterns该功能首次在JavaSE19中预览,在JavaSE20中发布第二次预览版,在此版本中成为永久性功......
  • 使用Intellij Idea打包java为可执行jar包
    自己在实际工作中的需要,使用Idea打包项目为可执行的jar包,网上找了好多文章但总是不成功,多次尝试后终于跑通,所以记录下来,希望可以帮助各位步骤:1.选中Java项目工程名称,在菜单中选择 File->projectstructure... (快捷键Ctrl+Alt+Shift+S)。2.在弹出的窗口中左侧选中"Artifact......
  • java读取resouces目录下文件
    resources中存放一些个资源文件,比如properties文件等,编译好会自动将这里边的文件复制到target/classes里去。获取资源文件的方法说明:XXX.class.getResourceAsStream()返回的是inputstreamXXX.class.getResource("/")返回URL,是classpath的位置XXX.class.getClassLoader().getRes......
  • java中mysql索引过多导致查询的时间不稳定
    在Java中,MySQL索引过多可能导致查询时间不稳定的情况确实存在。尽管索引可以加速查询,但是索引也会带来额外的维护成本和存储开销。当数据库表中存在过多的索引时,可能会导致以下几个问题:查询优化器选择困难:当有多个索引可供选择时,查询优化器需要评估每个索引的成本和选择最佳的索引......