已知开始日期结束日期,计算出中间所有日期

// 已知开始时间和结束时间 计算出中间的所有日期
    getAllDate(start, end){
        let format = (time) => {
        //yyyy-MM-DD时间格式
        //let ymd = ''
        // let mouth = (time.getMonth() + 1) >= 10 ? (time.getMonth() + 1) : ('0' + (time.getMonth() + 1))
        //let day = time.getDate() >= 10 ? time.getDate() : ('0' + time.getDate())
        //ymd += time.getFullYear() + '-' // 获取年份。
        //ymd += mouth + '-' // 获取月份。
        // ymd += day // 获取日。
        let ymd = ''
        let mouth = (time.getMonth() + 1)
        let day = time.getDate() >= 10 ? time.getDate() : ('0' + time.getDate())
        ymd += mouth + '.' // 获取月份。
        ymd += day // 获取日。
        //m.df格式
        return ymd // 返回日期。
        }
        let dateArr = []
        let startArr = start.split('-')
        let endArr = end.split('-')
        let db = new Date()
        db.setUTCFullYear(startArr[0], startArr[1] - 1, startArr[2])
        let de = new Date()
        de.setUTCFullYear(endArr[0], endArr[1] - 1, endArr[2])
        let unixDb = db.getTime()
        let unixDe = de.getTime()
        let stamp
        const oneDay = 24 * 60 * 60 * 1000;
        for (stamp = unixDb; stamp <= unixDe;) {
          dateArr.push(format(new Date(parseInt(stamp))))
          stamp = stamp + oneDay
        }
        return dateArr
       },

### 计算两个日期之间的工作日数量 为了计算两个日期间的工作日数量并排除周末和指定节假日,可以采用以下方法: #### 方法概述 通过遍历给定的起始日期结束日期之间的每一天,判断这些日子是否为工作日。对于每一个日期,先检查其是否落在周六或周日;如果不是,则进一步确认该日期是否属于预定义的节假日列表。 #### 实现细节 下面是一个基于Java语言的具体实现方案[^1]: ```java import java.time.LocalDate; import java.util.HashSet; import java.util.Set; public class WorkDaysCalculator { private static final Set<LocalDate> holidays = new HashSet<>(); public static void main(String[] args) { // 初始化节假日集合 initializeHolidays(); LocalDate startDate = LocalDate.of(2023, 9, 1); LocalDate endDate = LocalDate.of(2023, 9, 30); int workDaysCount = countWorkDays(startDate, endDate); System.out.println("Between " + startDate + " and " + endDate + ", there are " + workDaysCount + " working days."); } /** * 统计两日期间的有效工作日数目 */ private static int countWorkDays(LocalDate startInclusive, LocalDate endExclusive) { long totalDays = ChronoUnit.DAYS.between(startInclusive, endExclusive); if (totalDays <= 0L) return 0; // 如果开始日期晚于等于结束日期则返回零 int result = 0; for (long i = 0; i < totalDays; ++i){ LocalDate currentDay = startInclusive.plusDays(i); DayOfWeek dayOfWeek = currentDay.getDayOfWeek(); boolean isWeekend = dayOfWeek == SATURDAY || dayOfWeek == SUNDAY; boolean isHoliday = holidays.contains(currentDay); if (!isWeekend && !isHoliday) { ++result; } } return result; } /** * 添加已知假期至Set中 */ private static void initializeHolidays() { // 假设这里添加了一些固定的节日作为例子 holidays.add(LocalDate.of(2023, OCTOBER, 1)); // National Day holidays.add(LocalDate.of(2023, OCTOBER, 2)); // 可继续增加其他特定年份内的公共假日... } } ``` 此代码片段展示了如何创建一个`WorkDaysCalculator`类来执行所需的任务。它首先初始化了一个包含所有法定假日的静态成员变量`holidays`,接着实现了`countWorkDays()`函数用于实际的日数统计逻辑。最后,在主程序里调用了这个功能,并打印了结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值