自然月是什么意思?解析自然月和整月的区别

自然月是什么意思?解析自然月和整月的区别

自然年月的概念

所谓自然月,是指每个月的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

}

})

}

版权声明

站内部分内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请

联系我们

一经核实,立即删除。并对发布账号进行永久封禁处理。

本站仅提供信息存储空间,不拥有所有权,不承担相关法律责任。

蓝鸟号超级会员

打赏

收藏

链接

相关推荐

下载最新的日本AV字幕 (.srt / .ass 文件)
bt365官方网注册

下载最新的日本AV字幕 (.srt / .ass 文件)

📅 07-11 👁️ 1400
哪位知道马鞍山电脑城在哪
365bet体育足球

哪位知道马鞍山电脑城在哪

📅 07-26 👁️ 9617
转珠珠16颗的寓意是什么?详细解释与图片、视频分享
87年是什么兔,什么命
bt365官方网注册

87年是什么兔,什么命

📅 07-10 👁️ 8803
GT930 显卡:性价比之选,性能与短板并存,核心参数解析
2025年3月商店公告
365bet官网体育娱乐

2025年3月商店公告

📅 07-15 👁️ 4069