为了更好的讲这节的内容,提示一个 JS 处理日期的小技巧,想获取上个月最后一天,只需要设置SetDate参数为0即可。
接着正文开始:
使用 JS 获取当前月的最后一天,咱们通常的思路先获取下个月的第一天,然后在减去一天,就是当前月的最后一天,所以自然会用到下面的代码:
我写此文的日期是2019.08.21,所以打印结果如下:
那这样的算法有没有bug,咱们并不确定,所以为了还原现场,现在咱们从2019.01.31一个一个来试试
打印:
咱们可以看到,我们把1月31号往后拨一个月在往前减一天,理应得到的是1月31号,实际得到的是2月28号,所以咱们写的代码是有bug的。
这又是怎么肥事?
咱们可以列出月份:
咱们通过month + 1,在 JS 中会理解成:
当前日期+当月的天数
所以上例中的date.setMonth(date.getMonth() + 1)等价于1月31号 + 31天,根据上面的列表,就可以看到结果是3月3号
所以不要认为 month + 1 就是月份加 1,它的意思是当前日期加上当月天数 。
那要怎么保证多了不会多跳一个月呢?
只要保证 month + 1 之前不会超过28号就行啦,那要怎么做到呢?
推算:
所以秘诀在把31号回拨到28号就行啦,所以多加以下这句话就行了:
完整代码:
运行结果:
本文介绍了JavaScript中获取上个月最后一天的一个常见错误及其解决方案。通常的方法是获取下个月的第一天再减去一天,但这在遇到2月时会有问题。例如,从2019年1月31日开始,此方法会得到2月28日而非预期的1月31日。原因在于`date.setMonth(date.getMonth()+1)`会使日期加当月天数。解决办法是在设置月份前,将日期调整为不超过28号。通过修改代码,可以确保不会多跳过一个月。
750

被折叠的 条评论
为什么被折叠?



