JS 获取指定日期所在月的第一天和最后一天
function getMonthStartAndEnd(dateString) {
const date = dateString ? new Date(dateString) : new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
// const firstDay = new Date(year, month - 1, 1);
const lastDay = new Date(year, month, 0);
const formattedFirstDay = `${year}-${month.toString().padStart(2, '0')}-01`;
const formattedLastDay = `${year}-${month.toString().padStart(2, '0')}-${lastDay.getDate()}`;
return { firstDay: formattedFirstDay, lastDay: formattedLastDay };
}
console.log(getMonthStartAndEnd('2023-11-15'));
// { "firstDay": "2023-11-01", "lastDay": "2023-11-30" }
没有传入参数,默认为当天日期。
首先根据传入的日期字符串(或者当前日期)创建一个 Date 对象。然后通过 Date 对象的方法获取年份和月份,并计算出该月的最后一天的 Date 对象。第一天都是1号,不用额外计算。
时间使用ES2017的padStart方法对两位数补零。
获取到的年月日数据后,使用模板字符串``拼接出 "YYYY-MM-DD" 的日期格式。
new Date(year, month, day) 按给定的参数创建日期对象
在JavaScript中,创建Date对象时,可以使用new Date(year, month, day)的形式返回指定日期,三个参数的含义如下:
- year:年份,四位数的整数值。
- month:月份,从0开始计数,范围是0-11,其中0表示一月,1表示二月,依此类推。所以如果要获取yyyy年mm月dd日,月份记得要-1,new Date(yyyy,mm-1,dd)。比如现在是12月,那么month要传11。
- day:日期,从1开始计数,范围是1-31,具体取决于指定月份的天数。0表示上一个月的最后一天。
// 假设当前是2023年11月(curr_year = 2023, curr_month = 10)。
let curr_year = 2023
let curr_month = 10
console.log(new Date(curr_year, curr_month, 0))
//curr_year为2023,curr_month为10(代表11月)。
//参数0表示上一个月的最后一天。
//Tue Oct 31 2023 00:00:00 GMT+0800 (中国标准时间)
console.log(new Date(curr_year, curr_month+1, 0))
//curr_year为2023,curr_month + 1表示下一个月,即12月。
//参数0表示上一个月的最后一天。
//Thu Nov 30 2023 00:00:00 GMT+0800 (中国标准时间)
console.log(new Date(curr_year, curr_month, 1))
//curr_year为2023,curr_month为10(代表11月)。
//参数1表示当前月份的第一天。
//Wed Nov 01 2023 00:00:00 GMT+0800 (中国标准时间)
console.log(new Date(curr_year, curr_month+1, 1))
//curr_year为2023,curr_month + 1表示下一个月,即12月。
//参数1表示下一个月的第一天。
//Fri Dec 01 2023 00:00:00 GMT+0800 (中国标准时间)