JS 获取指定日期所在月的第一天和最后一天

 JS四舍五入保留两位小数-CSDN博客

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 (中国标准时间)
  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值