计算日期:新手上路。根据后端返回的数据,计算出相应日期。

5 篇文章 0 订阅
4 篇文章 0 订阅

根据后端返回的数据,计算出相应的日期时间

作者刚入行一年不到,所以写得不咋地,大佬指教。

目标

  后端返回的对象集合中有三个属性,分别是forwarddate、forwardtype、levelfinishdate,目标是通过这三个属性倒推计算出相应时间,例如:
  2021-10-02倒推1天就是2021-10-01
  2021-10-08倒推1周就是2021-10-01
  2021-03-31倒推1月就是2021-02-28

这是后端返回数据数组中的一个对象

{
	forwarddate: 2, //乘数
	forwardtype: "W", //类型,D为天,W为周,M为月
	levelfinishdate: "2021-09-11" //日期
}

实现代码

computeDate(item) { //item为上面传入的一个对象
    var num = item.forwarddate //根据日期类型而定,分别是 几天、几周、几月
    var dateType = item.forwardtype //日期类型(D:'天',W:'周',M:'月')
    var finishDate = new Date(item.levelfinishdate) //将日期转换成标准时间(类似 Thu Jan 01 1970 08:00:01 GMT+0800 (中国标准时间))
    if(dateType == 'D') { //判断日期类型
        finishDate.setDate(finishDate.getDate()-num) //日期 - 天数
    }
    else if(dateType == 'W') {
        finishDate.setDate(finishDate.getDate()-num*7) //日期 - 周数 x 每周7天
    }else if(dateType == 'M') {
        var oldDate = finishDate.getDate() //原来是日期的第几天
        finishDate.setMonth(finishDate.getMonth()-num) //减去相应月份,当减为负时,年份会自动计算年份的加减
        //例如日期为2021-10-0,通过.getDate()就能获取到对应月份总共有多少天
        var newDay = new Date(finishDate.getFullYear(),finishDate.getMonth()+1,0).getDate()
        // 例如2021-03-31的天数是31日,倒退一个月是2021-02-28,天数是28日;Math.min()为取其中最小的值
        // 2021-03-31, 倒退一个月,旧值为31新值为28, 新值小于旧值, 取新值, 为:2021-02-28
        // 2021-03-28, 倒退一个月,旧值为28新值为28, 新值等于旧值, 取任意, 为:2021-02-28
        // 2021-03-27, 倒退一个月,旧值为27新值为28, 旧值小于新值, 取旧值, 为:2021-02-27
        finishDate.setDate(Math.min(oldDate,newDay)) 
    }
    //拼接成目标的时间格式 2021-10-01
    //注意:data.getMonth()获取月份得时候,会从0开始算起,所以需要加1
    return finishDate.getFullYear()
        +"-"+
        (finishDate.getMonth()+1>9 ? finishDate.getMonth()+1 : `0${finishDate.getMonth()+1}`)
        +"-"+
        (finishDate.getDate()>9 ? finishDate.getDate() : `0${finishDate.getDate()}`)
},

总结
  其中的setDate、setMonth方法最为好用,一开始我也不清楚有这方法,都是先换算成日期的原始值( new Date(2021-10-01).valueOf() )与目标值相减,再转换成正常日期格式;
  如果是以天、周为单位,就能使用原始值加减的方法进行换算得出相应结果;但如果是月份,因为每个月的天数都不一样,所以会出现误差,而setDate、setMonth方法会自动进行计算,简化了日期的换算,针不戳。
菜鸟教程 Date 对象

值得注意:
  2021-03-31 倒退一个月是 2021-02-28
  2021-03-28 倒退一个月也是 2021-02-28

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值