前言
今天要做一个功能,但是数据只给到上一月,所以测试的时候需要指定用上一月的今天日期去取数据。
也就是说今天是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,现在就可以指定日期取前一天,前七天,前一月的数据了!