// 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')
};
},