前言:
目前兄弟们对“js获取月末时间”大致比较关怀,兄弟们都需要知道一些“js获取月末时间”的相关文章。那么小编也在网络上网罗了一些关于“js获取月末时间””的相关文章,希望各位老铁们能喜欢,你们一起来了解一下吧!自然年月的概念
所谓自然月,是指每个月的1号到月底;自然年,是指每年的1月1号至12月31号。 而每个月的天数是不一样的,故而自然年月的计算,不能用通过减去固定天数的方式来计算。 如5月31号的上一个月,是4月30号,通过减去30天来计算就错了;同样,若只是月份减1,日期不变的话,也不对,会变成4月31号,但4月只有30天,js会自动进位到5月1号。 下面介绍两行代码即可搞定的自然年月计算的方法。
两行代码搞定自然月的计算知识点:先要获取目标月份的天数,怎么获取的简单技巧,这个是关键:
new Date(year, month+step+1, 0), 其中,
在加了步进月数step后,再+1, 即month+step+1,然后日期设置为0,
这行代码的意思是:再取目标月份的下一个月份1号的前1天(1-1=0)
这样就得到了目标月份的最后一天的日期,也即了目标月份的天数。目标日期与目标月份的天数对比,取最小的,即是目标日期,比如3月31号的下一个月是4月30号,而不是4月31号
natureMonth(curDate, step){ let targetDateLastDay = new Date(curDate.getFullYear(), curDate.getMonth() + step + 1, 0); return new Date(curDate.getFullYear(), curDate.getMonth() + step, Math.min(curDate.getDate(), targetDateLastDay.getDate()));}
当然,为了方便,curDate可以添加支持string类型,并且返回yyyy-MM-dd类型的日期字符串
故最终代码为
natureMonth(curDate, step) { if (!curDate || !step) return curDate; if (typeof curDate === 'string') curDate = new Date(curDate.replace(/[\/|\.]/g, '-')) // new Date(str) 对str格式的,ios只支持yyyy-MM-dd let targetDateLastDay = new Date(curDate.getFullYear(), curDate.getMonth() + step + 1, 0); let targetDate = new Date(curDate.getFullYear(), curDate.getMonth() + step, Math.min(curDate.getDate(), targetDateLastDay.getDate())); return formatDate(targetDate, 'yyyy-MM-dd')}formatDate(dateObj, format) { let month = dateObj.getMonth() + 1, date = dateObj.getDate(); return format.replace(/yyyy|MM|dd/g, field => { switch (field) { case 'yyyy': return dateObj.getFullYear(); case 'MM': return month < 10 ? '0' + month : month; case 'dd': return date < 10 ? '0' + date : date } })}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #js获取月末时间