JS获取当前月的最后一天

为了更好的讲这节的内容,提醒一个 JS 处置日期的小技巧,想获取上个月最后一天,只需要设置SetDate参数为0即可。 var endDate = new Date(); //上个月最后一天 endDate.setDate(0); 接着正文最...

为了更好的讲这节的内容,提醒一个 JS 处置日期的小技巧,想获取上个月最后一天,只需要设置SetDate参数为0即可。

var endDate = new Date();
//上个月最后一天
endDate.setDate(0);

接着正文最先:

使用 JS 获取当前月的最后一天,咱们通常的思绪先获取下个月的第一天,然后在减去一天,就是当前月的最后一天,以是自然会用到下面的代码:

var date= new Date();
date.setMonth(date.getMonth() + 1);
//日期设置为0号, 0示意1号的前一天
let lastDay = date.setDate(0);
console.log('最后一天:' + new Date(lastDay).toLocaleString())

我写此文的日期是2019.08.21,以是打印效果如下:

最后一天:2019/8/31 下昼4:10:43

那这样的算法有没有bug,咱们并不确定,以是为了还原现场,现在咱们从2019.01.31一个一个来试试

var date= new Date(2019, 0, 31); //0 示意1月
date.setMonth(date.getMonth() + 1);
// 日期设置为0号, 0示意1号的前一天
let lastDay = date.setDate(0);
console.log('最后一天:' + new Date(lastDay).toLocaleString())

打印:

最后一天:2019/2/28 上午12:00:00

咱们可以看到,我们把 1月31号往后拨一个月在往前减一天,理应获得的是 1月31号,现实获得的是 2月28号,以是咱们写的代码是有bug的。

这又是怎么肥事?

咱们可以列出月份:

1月   1 ....... 28 29 30 31
2月   1 ....... 28 
3月   1 ....... 28 29 30 31

咱们通过 month + 1,在 JS 中会明白成:

当前日期 + 当月的天数

以是上例中的 date.setMonth(date.getMonth() + 1) 等价于 1月31号 + 31天 ,凭据上面的列表,就可以看到效果是3月3号


以是不要以为 month + 1 就是月份加 1,它的意思是当前日期加上当月天数 。

那要怎么保证多了不会多跳一个月呢?

只要保证 month + 1 之前不会跨越28号就行啦,那要怎么做到呢?

推算:

  • 31号 + 31 会超
  • 30号 + 31 会超
  • 29号 + 31 会超
  • 28号 + 31 照样 28 号 恰好

以是窍门在把31号回拨到28号就行啦,以是多加以下这句话就行了:

date.setDate(28)

完整代码:

var date= new Date(2019, 0, 31); //0 示意1月
date.setDate(28)
date.setMonth(date.getMonth() + 1);
// 日期设置为0号, 0示意1号的前一天
let lastDay = date.setDate(0);
console.log('最后一天:' + new Date(lastDay).toLocaleString())    

运行效果:

最后一天:2019/1/31 上午12:00:00   
思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各种产物的最新流动,优惠券领取点击进入

3.广告同盟: 整理了现在主流的广告同盟平台,若是你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/4867

  • 发表于 2021-02-11 16:56
  • 阅读 ( 202 )
  • 分类:互联网

0 条评论

请先 登录 后评论
822342
822342

675 篇文章

你可能感兴趣的文章

相关问题