1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基于JS计算指定时间(年 月 日)后的日期

基于JS计算指定时间(年 月 日)后的日期

时间:2021-09-17 21:53:20

相关推荐

基于JS计算指定时间(年 月 日)后的日期

闲暇无聊做个小项目,需要根据已知的日期,计算指定时间后的日期,指定的日期可以按“天”、“月”、“年”为单位,项目基于uni-app开发,使用uView。

简单分析,分歧点在于日期计算时,大小月和平润月的日期是按照当前月的最后一天还是下个月的第一天来算,纠结半天后,决定采用成年人的选择方案,全要。

首先,常用的时间处理类能解决基本需求,因为项目中已经有字符串格式的日期,为“XXXX年XX月XX日”,想想要用两种方法,就懒得去格式化,直接手动分割,获取已有的日期后转为两种,一种是年月日单独分割,第二种基于第一种拼接为“XXXX-XX-XX”的格式。代码如下:

//获取并格式化日期,两种getDate(){var dateInfo = {}dateInfo.date = this.goodsDatedateInfo.year = dateInfo.date.slice(0, 4)dateInfo.month = dateInfo.date.slice(5, 7)dateInfo.day = dateInfo.date.slice(8, 10)dateInfo.dddd = `${dateInfo.year}-${dateInfo.month}-${dateInfo.day}`dateInfo.olddate = new Date(dateInfo.dddd)return dateInfo},

如果输入的日期想要是当前日期,直接使用new Date()就行,需要注意的是月份是从0开始算,需要+1,代码也贴一下,不需要的就忽略,如下:

const d = new Date()const year = d.getFullYear()let month = d.getMonth() + 1month = month < 10 ? `0${month}` : monthconst date = d.getDate()this.mindate = `${year-3}-${month}-${date}`this.defaultDate = `${year}-${month}-${date-1}`

关于分歧点,以月份为例子,分别贴上不跳月份和跳月份的代码

不跳月份代码如下,主要思路是先计算月份之和,然后拿月份之和除以12,分别得到商和余数,商是要加在年份上的,余数就是月份。最后是天的计算,使用new Date(newYear, newMonth, 0).getDate()方式计算结果的年份和月份对应的天数。

//某些月后的日期addmonth(monthNum) {// 获取格式化后的日期var dInfo = this.getDate()//月份计算,可能会大于12个月var sumMonth = Number(dInfo.month) + Number(monthNum)// 如果大于12,拿月份除以12,获取商和余数if (sumMonth > 12) {// 余数为新的月份var newMonth = (sumMonth % 12)//年份加上商为新的年份var newYear = Number(year) + Math.floor(sumMonth / 12)} else {newMonth = sumMonthnewYear = dInfo.year}//获取有当前年份月份有的天数var d = new Date(newYear, newMonth, 0).getDate()if (d < dInfo.day) {var newDay = d} else {newDay = dInfo.day}var newDate = `${newYear}年${newMonth}月${newDay}日`console.log(newDate)},

第二种就比较简单了,直接上代码:

expirationConfirm(e) {//获取格式化后的生产日期var oldDate = this.getDate().olddate// 如果是月份,if (e.value[1] == "月") {// 文案为某个月this.expirationData = `${e.value[0]}个${e.value[1]}`// 计算过期日期this.expireDate = uni.$u.timeFormat(oldDate.setMonth(oldDate.getMonth()+e.value[0]), 'yyyy年mm月dd日');} else if(e.value[1] == "年") {this.expirationData = `${e.value[0]}${e.value[1]}`this.expireDate = uni.$u.timeFormat(oldDate.setFullYear(oldDate.getFullYear()+e.value[0]), 'yyyy年mm月dd日');}else{this.expirationData = `${e.value[0]}${e.value[1]}`this.expireDate = uni.$u.timeFormat(oldDate.setDate(oldDate.getDate()+e.value[0]), 'yyyy年mm月dd日');}this.expirationShow = falseconsole.log(this.expireDate)},

主要方法:oldDate.setMonth(oldDate.getMonth()+e.value[0]

参数说明:oldDate是格式化后的日期,e.value[0]为数字,比如10个月,10天,中的10。

另外还有setFullYear、setMonth、setDate、setHours、setMinutes、setSeconds这些方法,灵活使用可以应对周、季度、半年等等,自行想象吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。