From d7dca690cedd12e271f0ee0b9050679d73796f5c Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期一, 06 一月 2025 09:28:10 +0800
Subject: [PATCH] 1

---
 server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java |   32 +++++++++++++++++++-------------
 1 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java b/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java
index e6be864..df82f83 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java
@@ -39,17 +39,20 @@
      *                                浠ュ勾涓哄崟浣嶇浉宸负锛�6骞�
      *                                浠ユ湀涓哄崟浣嶇浉宸负锛�73涓湀
      *                                浠ユ棩涓哄崟浣嶇浉宸负锛�2220澶�
-     * @param fromDate
-     * @param toDate
+     * @param toDateOrigin
      * @return
      */
-    public static DateCompare dayCompare(Date fromDate,Date toDate,Date freeStart,Date freeEnd){
+    public static DateCompare dayCompare(Date fromDateOrigin,Date toDateOrigin,Date freeStart,Date freeEnd){
         //寮�濮嬫椂闂村線鍚庡欢浼革紝闄ゅ幓鏈夋晥鏃舵湡
-        fromDate = DateUtil.addDaysToDate(fromDate,getIntersectingDays(fromDate,DateUtil.addDaysToDate(toDate,1),freeStart,DateUtil.addDaysToDate(freeEnd,1)));
-        if(toDate.getTime()<  fromDate.getTime()){
+        Date fromDate = DateUtil.addDaysToDate(fromDateOrigin,getIntersectingDays(fromDateOrigin,DateUtil.addDaysToDate(toDateOrigin,1),
+                freeStart,
+                Objects.isNull(freeEnd)?null:DateUtil.addDaysToDate(freeEnd,1))
+        );
+        if(toDateOrigin.getTime()<  fromDate.getTime()){
             return DateCompare.builder().day(0).month(0).year(0).yearFloat(new BigDecimal(0)).monthFloat(new BigDecimal(0)).build();
         }
-        toDate = DateUtil.addDaysToDate(toDate,1);//鍖呭惈鎴鏃ユ湡
+        Date toDate =DateUtil.addDaysToDate(toDateOrigin, 1);
+//        toDate = DateUtil.addDaysToDate(toDate,1);//鍖呭惈鎴鏃ユ湡
         Calendar  from  =  Calendar.getInstance();
         from.setTime(fromDate);
         Calendar  to  =  Calendar.getInstance();
@@ -67,7 +70,7 @@
         BigDecimal yearFloat = new BigDecimal(year) ;
         BigDecimal monthFloat = new BigDecimal(month) ;
 
-        int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate)+1);
+        int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate));
         if(yearDays!=0){
             if(yearDays <0){
                 year = year-1;
@@ -76,7 +79,7 @@
             }
             yearFloat = yearFloat.add(new BigDecimal(1.0*yearDays).divide(new BigDecimal(365.0), 15,RoundingMode.HALF_UP));
         }
-        int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)+1) ;
+        int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)) ;
         if(monthDays!=0){
             if(monthDays <0){
                 month = month-1;
@@ -89,7 +92,7 @@
     }
 
     public static void main(String[] args) {
-        DateCompare dateCompare =   DateCompare.monthYearCompare(DateUtil.getDateFromString("2024-12-02 00:00:00"),DateUtil.getDateByString("2025-01-02 00:00:00") );
+        DateCompare dateCompare =   DateCompare.monthYearCompare(DateUtil.getDateFromString("2025-06-03 00:00:00"),DateUtil.getDateByString("2025-09-02 00:00:00") );
         System.out.println(dateCompare.day);
         System.out.println(dateCompare.monthDays);
         System.out.println(dateCompare.month);
@@ -99,9 +102,9 @@
         System.out.println(dateCompare.year);
         System.out.println(dateCompare.yearFloat);
     }
-    public static DateCompare monthYearCompare(Date fromDate,Date toDate ){
+    public static DateCompare monthYearCompare(Date fromDate,Date toDateOrigin ){
         //寮�濮嬫椂闂村線鍚庡欢浼革紝闄ゅ幓鏈夋晥鏃舵湡
-        toDate =DateUtil.addDaysToDate(toDate, 1);
+        Date toDate =DateUtil.addDaysToDate(toDateOrigin, 1);
         Calendar  from  =  Calendar.getInstance();
         from.setTime(fromDate);
         Calendar  to  =  Calendar.getInstance();
@@ -119,7 +122,7 @@
         BigDecimal yearFloat = new BigDecimal(year) ;
         BigDecimal monthFloat = new BigDecimal(month) ;
 
-        int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate)+1);
+        int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate));
         if(yearDays!=0){
             if(yearDays <0){
                 year = year-1;
@@ -128,7 +131,7 @@
             }
             yearFloat = yearFloat.add(new BigDecimal(1.0*yearDays).divide(new BigDecimal(365.0), 15,RoundingMode.HALF_UP));
         }
-        int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)+1) ;
+        int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)) ;
         if(monthDays!=0){
             if(monthDays <0){
                 month = month-1;
@@ -141,6 +144,9 @@
     }
 
     public static int getIntersectingDays(Date start1, Date end1, Date start2, Date end2) {
+        if(Objects.isNull(start2)||Objects.isNull(end2)){
+            return 0;
+        }
         Date earlierStart = DateUtil.daysBetweenDates(start1,start2)>0? start1 : start2;
         Date laterEnd =  DateUtil.daysBetweenDates(end2,end1)>0 ? end1 : end2;
 

--
Gitblit v1.9.3