中获取当月天数_用JS 在获取当前月的最后一天遇到的坑

本文介绍了JavaScript中获取上个月最后一天的一个常见错误及其解决方案。通常的方法是获取下个月的第一天再减去一天,但这在遇到2月时会有问题。例如,从2019年1月31日开始,此方法会得到2月28日而非预期的1月31日。原因在于`date.setMonth(date.getMonth()+1)`会使日期加当月天数。解决办法是在设置月份前,将日期调整为不超过28号。通过修改代码,可以确保不会多跳过一个月。

39d8b4a8f81a221c6626276d7ad90cc5.png

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

75e7940183125a136629ef2d808c1ae8.png

接着正文开始:

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

b405232c3d81ab16168916459295aa4b.png

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

4236301a102439d6b79baf89b3b95a45.png

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

8064c903b43bbc3968e6d147bed2b932.png

打印

1db14999289ee501410e7a398749e10e.png

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

这又是怎么肥事?

咱们可以列出月份:

6acdae91bd5e1581b2a9fb3adebed4dd.png

咱们通过month + 1,在 JS 中会理解成:

当前日期+当月的天数

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

4b94b7f916e0aeb5e66d867a49b66493.png

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

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

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

推算:

eeff319bfd04deae640e48c9be466579.png

所以秘诀在把31号回拨到28号就行啦,所以多加以下这句话就行了:

3cceb50aa4a7fd84f25dee5f806e3415.png

完整代码:

6c9535cf7465cd96f01b292fa48d52c5.png

运行结果:

af95f70d3efddadeffb4f0004243faa3.png

2641e42f01c72b59616b20a7822eafdc.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值