手机版

分析JS当月最后一天遇到的坑

时间:2021-08-20 来源:互联网 编辑:宝哥软件园 浏览:

为了更好地讲述本节内容,建议使用JS处理日期的小技巧。要获取上个月的最后一天,您只需要将SetDate参数设置为0。

var endDate=new Date();//上个月最后一天的enddate . setdate(0);然后正文开始:

用JS得到当月的最后一天,我们通常会得到下个月的第一天,然后减去一天,也就是当月的最后一天,那么自然会用到下面的代码:

var Date=new Date();date . setmonth(date . getmonth)(1);//日期设置为0号,表示让lastDay=date .设置1号前一天的日期(0);Console.log('最后一天':新日期(最后一天)。tolocal string())我在2019年8月21日写了这篇文章,所以打印结果如下:

最后一天:2019年8月31日4:10336043

我们不确定这样的算法是否有bug,所以为了还原场景,我们从2019.01.31开始逐一尝试。

var date=新日期(2019,0,31);//0表示一月日期. setmonth(date . getmonth)(1);//日期设置为0号,表示让lastDay=date .设置1号前一天的日期(0);Console.log('最后一天':新日期(最后一天)。tolocal string())打印:

最后一天:2019年2月28日12:00336000

正如我们所看到的,当我们把1月31日推迟一个月时,我们应该得到1月31日,但实际上我们得到了2月28日,所以我们的代码有bug。

这个胖东西怎么样?

我们可以列出月份:

1月1日.28 29 30 32 1 .3月1日.28 29 30 31

让我们通过第1个月,在JS中会被理解为:

当月的天数

因此,上例中的date.setMonth(date.getMonth() 1)相当于1月31日的31天。根据上面的列表,我们可以看到结果是3月3日。

所以不要以为月1就是月加1,它是指当前日期加当月天数。

我们如何保证我们不会再跳一个月?

只要保证1月前不超过28号,怎么做?

外推:

31号,31号超越30号,31号超越29号,31号超越28号。所以秘诀就是把31号叫回28号,所以加了下面一句话:

完整的日期代码。设置日期(28):

var date=新日期(2019,0,31);//0表示一月日期。设置日期(28)日期。setmonth(日期。getmonth()1);//日期设置为0号,表示让lastDay=date .设置1号前一天的日期(0);console.log的运行结果('最后一天':新日期(最后一天)。tolocalstring()):

最后一天:2019年1月31日12:00336000

代码部署后可能存在的bug无法实时获知。为了事后解决这些bug,需要花费大量时间调试日志。顺便推荐一个不错的bug监控工具Fundebug。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:分析JS当月最后一天遇到的坑是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。