JS日期设置月份计算日期遇到的坑
有一个业务需求是,根据当前时间往前推3个月(不含当月),取每个月的月初和月末时间,送给后端接口查询相关信息:
代码:
var result = [];、
var currentDate = new Date("2025-03-27");
for (var i = 0; i < 3; i++) {
// 当前月份-1
currentDate.setMonth(currentDate.getMonth() - 1);
// 获取月份的第一天
var firstDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
// 获取月份的最后一天
var lastDay = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0);
// 记录
result.push({
year: currentDate.getFullYear(),
month: currentDate.getMonth() + 1, // 月份从0开始,所以+1
firstDay: firstDay.toLocaleString(),
lastDay: lastDay.toLocaleString()
});
}
//打印结果
console.info(result);
当日期为"2025-03-27"的时候,没问题

但是当日期为2025-3-29/2025-3-30/2025-3-31的时候,日期推算错误

原因:月份设置为-1的时候,日期会判断,当前时间的日是否存在,存在,没问题,若不存在,则会加后推n日,
例如:2025-03-31往前推1月是2月,2月只有2.28,没有31号,31-28 = 3,往后推3天就是3.3,设置日期之后,就是3.3号每次往前推一月,得到2025.2.3,2025.1.3
currentDate.setMonth(currentDate.getMonth() - 1);
修复:不再设置上一月,直接取月份的第一天和最后一天
var result = [];
//假设日期是2025-03-27
var currentDate = new Date("2025-03-31");
for (var i = 1; i <= 3; i++) {
// 获取月份的第一天
var firstDay = new Date(currentDate.getFullYear(), currentDate.getMonth()-i, 1);
// 获取月份的最后一天
var lastDay = new Date(currentDate.getFullYear(), currentDate.getMonth()-i + 1, 0);
// 记录
result.push({
DATE: currentDate.toLocaleString(),
firstDay: firstDay.toLocaleString(),
lastDay: lastDay.toLocaleString()
});
}
//打印结果
console.info(result);


浙公网安备 33010602011771号