时间筛选范围(年度、季度、月份、周)

            // 0本月、-1上月、1下月
            getMonth(months = 0) {
                let d = new Date();
                let year = d.getFullYear();
                let month = d.getMonth() + 1;
                if (Math.abs(months) > 12) {
                    months = months % 12;
                };
                if (months != 0) {
                    if (month + months > 12) {
                        year++;
                        month = (month + months) % 12;
                    } else if (month + months < 1) {
                        year--;
                        month = 12 + month + months;
                    } else {
                        month = month + months;
                    };
                };
                month = month < 10 ? "0" + month : month;
                let date = d.getDate();
                let firstday = year + "-" + month + "-" + "01";
                let lastday = "";
                if (month == "01" || month == "03" || month == "05" || month == "07" || month == "08" || month ==
                    "10" || month == "12") {
                    lastday = year + "-" + month + "-" + 31;
                } else if (month == "02") {
                    if ((year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 == 0)) {
                        lastday = year + "-" + month + "-" + 29;
                    } else {
                        lastday = year + "-" + month + "-" + 28;
                    };
                } else {
                    lastday = year + "-" + month + "-" + 30;
                };
                return {
                    startTime: firstday,
                    endTime: lastday
                }
            },
            //0本周、-1上周
            getWeekFn(week = 0) {
                let now = new Date();
                let day = now.getTime();
                let dayCode = now.getDay() > 0 ? now.getDay() : 7; // 如果 dayCode 为 0(周日),则视为 7
                let dayTime = 24 * 60 * 60 * 1000; // 一天的毫秒数 
                let Mon = day - dayTime * (dayCode - 1); //周一
                Mon = uni.$u.util.formatDate(Mon, '4');
                let startDate = ''
                let endDate = ''
                if (week === 0) {
                    startDate = Mon;
                    endDate = new Date(new Date(Mon).getTime() + 6 * dayTime);
                    endDate = uni.$u.util.formatDate(endDate, '4');
                } else if (week === -1) {
                    endDate = new Date(new Date(Mon).getTime() - dayTime);
                    endDate = uni.$u.util.formatDate(endDate, '4');
                    startDate = new Date(new Date(endDate).getTime() - 6 * dayTime);
                    startDate = uni.$u.util.formatDate(startDate, '4');
                } else {
                    // 如果 week 不是 0 或 -1,可以抛出错误或返回默认值  
                    throw new Error("Invalid week value. Please use 0 for this week or -1 for last week.");
                }
                return {
                    startTime: startDate,
                    endTime: endDate
                }
            },
            // quarter季度,0为本季度
            getQuarterDateRange(year = new Date().getFullYear(), quarter = 0) {
                const now = new Date();
                let monthStart, monthEnd;
                // 检查是否是“本季度”  
                if (quarter === 0) {
                    const currentMonth = now.getMonth(); // 当前月份(0-11)  
                    const quarterNumber = Math.floor((currentMonth + 3) / 3); // 计算当前是第几季度(1-4)  
                    monthStart = (quarterNumber - 1) * 3; // 季度的起始月份(0-based index)  
                    monthEnd = monthStart + 3; // 季度的结束月份(不包含,所以加3后减1用于循环计算,但这里我们不需要这个值直接用于日期对象)  
                } else {
                    // 如果不是“本季度”,则根据传入的季度号计算  
                    monthStart = (quarter - 1) * 3;
                    monthEnd = monthStart + 3; // 实际上我们不需要这个值来创建结束日期,但保留以作参考  
                }

                // 季度的开始日期  
                const startDate = new Date(year, monthStart, 1);

                // 季度的结束日期是下一季度的第一天的前一天  
                const endDate = new Date(year, monthStart + 3, 0, 23, 59, 59, 999);

                // 如果年份因为月份回滚而需要调整(例如从12月到1月的情况)  
                if (endDate.getFullYear() !== year) {
                    endDate.setFullYear(endDate.getFullYear() -
                        1); // 实际上对于季度计算来说,这一步通常不需要,因为我们已经正确设置了月份为0(上个月的最后一天)  
                    // 但是由于JavaScript Date对象的月份是从0开始的,并且设置月份为超出范围的值会自动回滚到前一年/下一个月,  
                    // 所以这里的调整实际上在正常情况下是多余的,保留只是为了说明这一点。  
                }
                return {
                    startTime: uni.$u.util.formatDate(startDate, '4'),
                    endTime: uni.$u.util.formatDate(endDate, '4')
                };
            },
            // type0全年,1上半年,2下半年
            getYearRange(year = new Date().getFullYear(), type = 0) {
                let startTime, endTime;
                if (type === 0) {
                    startTime = new Date(year, 0, 1); // 1月1日  
                    endTime = new Date(year + 1, 0, 0, 23, 59, 59, 999); // 下一年1月1日的前一天(即12月31日的最后一毫秒)  
                } else if (type === 1) {
                    startTime = new Date(year, 0, 1); // 1月1日  
                    endTime = new Date(year, 6, 0, 23, 59, 59, 999); // 7月1日的前一天(即6月30日的最后一毫秒)  
                } else if (type === 2) {
                    startTime = new Date(year, 6, 1); // 7月1日  
                    endTime = new Date(year + 1, 0, 0, 23, 59, 59,
                        999); // 下一年1月1日的前一天(对于下半年来说,就是这一年的12月31日的最后一毫秒)  
                } else {
                    throw new Error(
                        'Invalid type parameter. Use 0 for full year, 1 for first half, and 2 for second half.'
                    );
                }
                return {
                    startTime: uni.$u.util.formatDate(startTime, '4'),
                    endTime: uni.$u.util.formatDate(endTime, '4')
                };
            },
            // year年,month月份
            getMonthRange(year = new Date().getFullYear(), month = 1) {
                // 检查月份是否在有效范围内  
                if (month < 1 || month > 12) {
                    throw new Error('Invalid month parameter. Use a value between 1 and 12.');
                }
                // 设置月份为0基索引(因为JavaScript的Date对象月份是从0开始的)  
                const monthIndex = month - 1;
                // 创建开始日期(月份的第一天)  
                const startTime = new Date(year, monthIndex, 1);
                // 创建结束日期(月份的最后一天,时间设置为23:59:59.999)  
                // 注意:设置下一个月的0号为获取上一个月的最后一天  
                const endTime = new Date(year, monthIndex + 1, 0, 23, 59, 59, 999);

                // 返回开始日期和结束日期  
                return {
                    startTime: uni.$u.util.formatDate(startTime, '4'),
                    endTime: uni.$u.util.formatDate(endTime, '4')
                };
            },
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值