js取今天日期的上一个月的数据

前言

今天要做一个功能,但是数据只给到上一月,所以测试的时候需要指定用上一月的今天日期去取数据。
也就是说今天是07-10,我需要以6-10为基准去查前一天,前七天,前一月的数据
上网查了查,没有现成的,只能自己手敲T_T

代码如下

如有疏误,欢迎指出~
测试用例都写好了。。

2020-07-10更新

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<script>
  function MockTime(){
    //取当前日期,需要注意,月份索引从0开始,日期从1开始
    now =new Date()
    now.setMonth(2)
    now.setDate(31)
    console.log(now)  //3月31日

    let year=now.getFullYear().toString()
    let arr=[5,7,9,12]
    //如果取到月份数是[5,7,9,12],他们的上一个月是没有31号的,设置为30替代
    if (now.getDate()===31 && arr.includes(now.getMonth()+1)){
      now.setDate(30)
    }
    //判断闰年,如果不是闰年则2月只有28天,超过设置为28,为闰年则设置为29
    if((now.getFullYear()%4!==0)||(now.getFullYear()%100===0&&now.getFullYear()%400!==0)){
      //在不是闰年的情况下,若月份为3,则超过28都设为28
      if (now.getDate()>28 && now.getMonth()===2){
        now.setDate(28)
      }
    }else {
      //在是闰年的情况下,若月份为3,则超过29都设为29
      if (now.getDate()>29 && now.getMonth()===2){
        now.setDate(29)
      }
    }
    //月份补0,方便后面传递参数到数据库取数据
    // 此处now.getMonth(),若月份为3,得到2,不加1得到的就是我们想要的结果了
    let month=now.getMonth()<10? "0"+now.getMonth() : now.getMonth()
    //注意,如果当前为一月份,则需使年份-1,并且此时now.getMonth()为0,故需+12
    // 此时month为12,不需要补0
    if ((now.getMonth()+1) ===1 ){
      year=(now.getFullYear()-1).toString()
      month=(now.getMonth()+12).toString()
    }
    //日期补0,方便后面传递参数到数据库取数据
    let day = now.getDate()<10 ? "0"+now.getDate() : now.getDate();
    let this_time=year+'-'+month+'-'+day
    //返回得到的上一个月的日期
    return this_time
  }
  //得到模拟数据:当前日期前一个月的日期
let mock_time=  MockTime()
  console.log(mock_time)  // 2020-02-29
  let pre_day_time=PreDayTime(mock_time)
  console.log(pre_day_time)  //Object { startTime: "2020-02-28", endTime: "2020-02-28" }
  let pre_week_time=PreWeekTime(mock_time)
  console.log(pre_week_time)   //  Object { startTime: "2020-02-23", endTime: "2020-02-29" }
  let pre_month_time=PreMonthTime(mock_time)
  console.log(pre_month_time) //  Object { startTime: "2020-01-01", endTime: "2020-01-31" }

//传入当前时间,返回前一天的数据
  function PreDayTime(mydate) {
    let dateTime=getStringToDate(mydate)
    dateTime=dateTime.setDate(dateTime.getDate()-1);
    dateTime=new Date(dateTime);
    let start_time=getDateToString(dateTime)
    let this_time={
      startTime:start_time,
      endTime:start_time
    }
    return this_time
  }

  //传入当前时间,返回七天前日期
  function PreWeekTime(mydate){
    let dateTime=getStringToDate(mydate)
    let end_time=mock_time
    dateTime=dateTime.setDate(dateTime.getDate()-6);
    dateTime=new Date(dateTime);
    let start_time=getDateToString(dateTime)
    let this_time={
      startTime:start_time,
      endTime:end_time
    }

    return this_time
  }

  //传入当前时间,返回前一月日期
  function PreMonthTime(mydate) {
    let dateTime=getStringToDate(mydate)
    dateTime=dateTime.setMonth(dateTime.getMonth()-1)
    dateTime=new Date(dateTime);
    dateTime.setDate(1)
    let start_time=getDateToString(dateTime)
    dateTime.setDate(31)
    let end_time=getDateToString(dateTime)
    let this_time={
      startTime:start_time,
      endTime:end_time
    }
    return this_time
  }
  // 字符串转时间
  function getStringToDate(stringData) {
    //分割保存到数组
    let arr=stringData.split('-');
    //初始化时间,这里arr[1]要-1,因为索引0-11代表1-12月,如这里是06,其实代表7月,转成时间要减1
    let back_time=new Date(parseInt(arr[0]),parseInt(arr[1])-1,parseInt(arr[2]));
    return back_time
  }
  // 时间转字符串
  function getDateToString(date_data){
    let year=date_data.getFullYear()
    //月份补0,方便后面传递参数到数据库取数据
    //此处+1,索引的原因,转成字符串要加一
    let month=(date_data.getMonth()+1)<10? "0"+(date_data.getMonth()+1) : (date_data.getMonth()+1)
    //日期补0,方便后面传递参数到数据库取数据
    let date = date_data.getDate()<10 ? "0"+date_data.getDate() : date_data.getDate();
    let this_time=year+'-'+month+'-'+date
    return this_time
  }

</script>
</body>
</html>

结果:

Date Tue Mar 31 2020 10:37:18 GMT+0800 (中国标准时间)
testtime.html:14:13
2020-02-29 testtime.html:51:11
Object { startTime: "2020-02-28", endTime: "2020-02-28" }
testtime.html:53:11
Object { startTime: "2020-02-23", endTime: "2020-02-29" }
testtime.html:55:11
Object { startTime: "2020-01-01", endTime: "2020-01-31" }
testtime.html:57:11

ok,现在就可以指定日期取前一天,前七天,前一月的数据了!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值