每次遇到不太熟悉的东西,就会莫名的心虚,如果再有需求确实需要,还会有反抗情绪,就比如说昨天的一个需求。
需求细节
报表数据项加链接,需要把起止时间携带到链接地址上,方便在对应地址的页面回显数据。不过报表数据页面时间是按月份操作的,携带的时间需要时年月日,并且起始时间为"年-月-01",截止时间为"年-月-该月最后一天"。
心理活动
直接想到的就是,一三五七八十腊,三十一天永不差;四六九十一,三十天;二月平年28天,闰年29天。闰年是能被4除尽的年份。好麻烦,需要知道每月最后一天,这么大代价。
PO姑娘说用现成的函数呀,心理默默念她好几遍,不知道有没有打喷嚏。
不情愿归不情愿,新想法还是会平心接受,按照这个思路老老实实的去查了。
居然还真有,服了服了。
今天早上拿着粉红糖给PO姑娘送过去,人家是C#后端转过来的,说是只做过一会会,一会会是两年。只能承认关公面前丢丑了。
获取每个月最后一天的2方法
第一种
思想:用下一个月1号对应的毫秒减去一天对应的毫秒(246060*10000)就可以获得本月的最后一天日期。
getMonthLastDateFn(){
let dateStr = '2020-02-06'; //需要获取此月最后一天的日期
let dateObj = new Date(dateStr);
let nextMonth = dateObj.getMonth()+1; //0-11,下一个月
//设置当前日期为下个月的1号
dateObj.setMonth(nextMonth);
dateObj.setDate(1); //1-31
let nextMonthFirstDayTime = dateObj.getTime(); //下个月一号对应毫秒
let theMonthLastDayTime = nextMonthFirstDayTime-24*60*60*1000; //下个月一号减去一天,正好是这个月最后一天
let theMonthDay = (new Date(theMonthLastDayTime)).getDate();
return theMonthDay;
}
第二种
思想:利用Date函数对传入的日期参数(参数值为0),new Date(year,month,date),month取值范围为0-11(这样直接传入需求的月份就是下一个月)。
参考依据:
http://es5.github.io/#x15.9.1.12
先获取对应年-月-1号,再用1号加上传入的date后,减去1;这样如果date传入的是0,经过这样的计算得到的就是这个月的最后一天的日期。
getMonthLastDateFn(){
let dateStr = '2020-02-06'; //需要获取此月最后一天的日期
let dateObj = new Date('2020','02',0); //注意:这里传入月份取值范围是0-11
let theMonthDay = dateObj.getDate();
return theMonthDay;
}