package com.ruoyi.pay.util;

import java.math.BigDecimal;
import java.util.Date;

public class DateCompareUtil {
    /**
     * 比较2个时间短是否重叠
     * @param start1
     * @param end1
     * @param start2
     * @param end2
     * @return 重叠返回true
     */
    public static boolean isOverlapping(Date start1, Date end1, Date start2, Date end2) {
        boolean a = start1.before(end2) && start2.before(end1);
        boolean b = start2.before(end1) && start1.before(end2);
        return a || b;
    }
    /**
     * 判断时间段1是否包含时间段2
     * @param start1
     * @param end1
     * @param start2
     * @param end2
     * @return 包含返回true
     */
    public static boolean isContain(Date start1, Date end1, Date start2, Date end2) {
        return (start1.before(start2)||start1.equals(start2) )&& (end1.after(end2)||end1.equals(end2));
    }

    /**
     * 得到2个日期之间的的时间差
     * @param startDate
     * @param endDate
     * @return  小时数
     */
    public static BigDecimal getDatePoor(Date startDate, Date endDate) {

        long nd = 1000 * 24 * 60 * 60;
        long nh = 1000 * 60 * 60;
        long nm = 1000 * 60;
        // long ns = 1000;
        // 获得两个时间的毫秒时间差异
        long diff = endDate.getTime() - startDate.getTime();
        // 计算差多少天
        long day = diff / nd;
        // 计算差多少小时
        long hour = diff % nd / nh;
        // 计算差多少分钟
        Long min = diff % nd % nh / nm;
        // 计算差多少秒//输出结果
        // long sec = diff % nd % nh % nm / ns;
        Long mymint = diff/1000/60;
        int intValue = mymint.intValue();

        return new BigDecimal((double)intValue/60);
    }

    /**
     * 说明：两个时间段任意的包含关系
     *
     * @param start1 开始时间1
     * @param end1 结束时间1
     * @param start2 开始时间2
     * @param end2 结束时间2
     * @return 是否存在包含关系 true or false
     */
    public static boolean eachContain(Date start1, Date end1, Date start2, Date end2) {
        boolean a = (start1.before(start2) || start1.equals(start2)) && (end1.after(end2) || end1.equals(end2));
        boolean b = (start2.before(start1) || start2.equals(start1)) && (end2.after(end1) || end2.equals(end1));
        return a || b;
    }

    /**
     * 说明：两个时间段是否存在包含或重叠的关系
     *
     * @param start1 开始时间1
     * @param end1 结束时间1
     * @param start2 开始时间2
     * @param end2 结束时间2
     * @return 是否存在包含或重叠关系 true or false
     */
    public static boolean isContainOrOverlap(Date start1, Date end1, Date start2, Date end2) {
        return DateCompareUtil.isOverlapping(start1, end1, start2, end2) || DateCompareUtil.eachContain(start1, end1, start2, end2);
    }
}

