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

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

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);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
非常感谢您的问题!我可以为您提供一个简单的 Java 计算器网页的实现方式。首先,您需要创建一个 HTML 文件,其中包含一个表单,其中可以输入和显示计算结果。然后,您可以使用 JavaScript 来编写处理表单数据的代码,并将其与 Java 后端结合使用来计算结果。 以下是一个简单的实现步骤: 1. 创建 HTML 文件并添加表单元素,例如: ``` <!DOCTYPE html> <html> <head> <title>Java 计算器网页</title> </head> <body> <h1>Java 计算器网页</h1> <form> <label for="num1">第一个数字:</label> <input type="number" id="num1" name="num1"><br> <label for="num2">第二个数字:</label> <input type="number" id="num2" name="num2"><br> <label for="operator">操作符:</label> <select id="operator" name="operator"> <option value="add">+</option> <option value="subtract">-</option> <option value="multiply">*</option> <option value="divide">/</option> </select><br> <input type="button" value="Calculate" onclick="calculate()"> </form> <p>结果: <span id="result"></span></p> <script src="calculator.js"></script> </body> </html> ``` 2. 创建一个 JavaScript 文件,这是处理表单数据的核心代码。在此示例中,该文件名为 calculator.js。 ``` function calculate() { // 获取表单中的数据 var num1 = parseInt(document.getElementById('num1').value); var num2 = parseInt(document.getElementById('num2').value); var operator = document.getElementById('operator').value; // 进行计算并显示结果 var result; switch (operator) { case 'add': result = num1 + num2; break; case 'subtract': result = num1 - num2; break; case 'multiply': result = num1 * num2; break; case 'divide': result = num1 / num2; break; default: result = 0; } document.getElementById('result').innerHTML = result; } ``` 3. 创建一个 Java 类来处理表单数据并返回结果。在此示例中,该类名为 Calculator.java。 ``` import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class Calculator extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取表单数据 int num1 = Integer.parseInt(request.getParameter("num1")); int num2 = Integer.parseInt(request.getParameter("num2")); String operator = request.getParameter("operator"); // 进行计算 int result; switch (operator) { case "add": result = num1 + num2; break; case "subtract": result = num1 - num2; break; case "multiply": result = num1 * num2; break; case "divide": result = num1 / num2; break; default: result = 0; } // 将结果发送回客户端 response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.println(result); } } ``` 4. 将 HTML 文件和 JavaScript 文件放置在 web 应用程序的根目录中,将 Calculator.java 文件放置在 web 应用程序的 WEB-INF/classes 目录中。启动 web 服务器并访问 HTML 文件,您应该能够看到计算器网页,并可以使用它计算两个数字的加、减、乘或除。 希望这个实现步骤能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tellsea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值