• js以当前时间为基础,便捷获取时间(最近2天,最近1周,最近2周,最近1月,最近2月,最近半年,最近一年,本周,本月,本年)


    在开发公司管理后台系统时,遇到了需要根据不同的时间段如“近一年、近半年、近三月、近一月、近一周”来获取并展示不同图表数据的需求,很是繁琐,项目开发周期又非常的短,自己想了一下,虽然有思路,但一时半会儿要写出来还是比较费时的,所以就索性上网找一个现成的轮子吧,还好已有大神写过同样的效果的,但离我实际的需求还是有点远,现在先参考大神的代码来做一个笔记吧:

    //格式化时间
    function formatTime(param) {
      let y = param.getFullYear();
      let m = param.getMonth() + 1;
      let d = param.getDate();
      m = m < 10 ? ("0" + m) : m;
      d = d < 10 ? ("0" + d) : d;
      return y + "-" + m + "-" + d + " ";
    }
    
    /**
    * 以当前时间为基础,便捷获取时间(最近2天,最近1周,最近2周,最近1月,最近2月,最近半年,最近一年,本周,本月,本年)
    * @param { string } code
    * @returns { Object }
    */
    function getDate(code) {
      const date = new Date();
      let endTime = formatTime(date);
      let date1 = Date.parse(date);
      let start = '';
      let end = '';
      let oneDay = 1000 * 3600 * 24;
    
      switch (code) {
        //今天
        case 'today':
          start = new Date();
          break;
        //最近2天
        case 'lastTwoDay':
          start = date1 - oneDay * 2;
          break;
        //最近1周
        case 'lastOneWeek':
          start = date1 - oneDay * 7;
          break;
        //最近2周
        case 'lastTwoWeek':
          start = date1 - oneDay * 14;
          break;
        //最近1月
        case 'lastOneMonth':
          start = new Date();
          start.setMonth(start.getMonth() - 1)
          break;
        //最近2月
        case 'lastTwoMonth':
          start = new Date();
          start.setMonth(start.getMonth() - 2)
          break;
        //最近3月
        case 'lastThreeMonth':
          start = new Date();
          start.setMonth(start.getMonth() - 3)
          break;
        //最近半年
        case 'lastHalfYear':
          start = date1 - oneDay * 183;
          break;
        //最近一年
        case 'lastOneYear':
          start = new Date();
          start.setYear(start.getFullYear() - 1)
          break;
        //本周
        case 'thisWeek':
          let a = 6 - date.getDay();
          start = new Date(date1 - oneDay * a).setHours(0, 0, 0, 0);
          end = new Date(date1 + oneDay * (1 + date.getDay())).setHours(24, 0, 0, 0)
          break;
        //本月
        case 'thisMonth':
          start = new Date();
          start.setHours(0, 0, 0, 0)
          start.setMonth(start.getMonth(), 1)
          end = new Date(start)
          end.setHours(0, 0, 0, 0)
          end.setMonth(start.getMonth() + 1, 1)
          break;
        //本年
        case 'thisYear':
          start = new Date();
          start.setHours(0, 0, 0, 0)
          start.setMonth(0, 1)
          start.setYear(start.getFullYear())
          end = new Date(start)
          end.setHours(0, 0, 0, 0)
          end.setMonth(start.getMonth(), 1)
          end.setYear(start.getFullYear() + 1)
          break;
      }
    
      return {
        startTime: formatTime(new Date(start)),
        endTime: end ? formatTime(new Date(end)) : endTime,
      }
    }
    

    使用方法很简单,输出最近一周:console.log(getDate('lastOneWeek'))。

    这种方法出来的效果如最近一周:{startTime: "2019-09-22 ", endTime: "2019-09-29 "},这样的处理适合那种只需要一个开始日期和结束日期的接口,而根据我们的实际需求,需要的是类似这样的数据:

    最近一周:["2019-09-22", "2019-09-23", "2019-09-24", "2019-09-25", "2019-09-26", "2019-09-27", "2019-09-28", "2019-09-29"]或者最近一月:["2019-08-29", "2019-08-30", "2019-08-31", "2019-09-01", ..., "2019-09-29"]。

    因为这个需求是用在类似折线图表这样的X轴做展示用的,如图:

    是不是很繁琐?让前端处理起来,相当麻烦,写后台接口的同事说你们前端别处理了,太麻烦了,这个日期我们来返给你们。真是良心啊!!!

    本文参考:https://www.cnblogs.com/qinacao/p/9117514.html

  • 相关阅读:
    MySQL进阶
    对象关系_many2many
    objectstate对象三种状态
    自动在数据库中创建表
    Pytest学习之使用多个fixture
    Pytest学习之fixture作用范围(scope)
    python测试dubbo类型接口
    swagger接口注释添加,接口版本变更规则
    Pytest-skip跳过功能
    接口自动化测试介入项目管理流程
  • 原文地址:https://www.cnblogs.com/tnnyang/p/11607088.html
Copyright © 2020-2023  润新知