根据两个日期 获取日期区间的所有日期和星期
假设我们要获取2019-10-10 到 2019-12-12之间的所有日期,直接上代码先
//给Date对象的原型加一个时间格式化为 YYYY-MM-DD的函数
Date.prototype.format=function(){
var y=this.getFullYear(); //获取年份
var m=this.getMonth()+1>=10?this.getMonth()+1:'0'+(this.getMonth()+1); //获取月份
var d=this.getDate()>=10?this.getDate():'0'+this.getDate(); //获取日期
return y+'-'+m+'-'+d
}
/**
获取两个时间区间的所有日期和星期
@startTime{String} 开始时间
@endTime{String} 开始时间
*/
function getDateAll(startTime,endTime){
var uniDs=Date.parse(startTime); //获取开始日期的毫秒数
var uniDe=Date.parse(endTime); //获取结束日期的毫秒数
var dateList=[]; //用来保存日期
var weekList=["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
for(var i=uniDs;i<=uniDe;){
var dateItem={}; //保存日期的每一天
var CUR_DATE=new Date(parseInt(i)); //设置当前日期的时间
dateItem.date=CUR_DATE.format(); //这里调用了在Date对象原型上加的格式时间函数获得YYYY-MM-DD格式的时间
dateItem.week=weekList[CUR_DATE.getDay()] //getDay()方法从 Date 对象返回一周中的某一天 (0 ~ 6)
//...... 这里你还可以根据自己的需要给dateItme加你想要的属性
dateList.push(dateItem);
i=i+24*60*60*1000; //循环变量增加一天的毫秒数
}
return dateList
}
这个方法需要掌握几个关于Date对象的方法
- Date.parse()返回1970年1月1日午夜到指定日期(字符串)的毫秒数。
- Date创建实例对象时,传入指定日期的毫秒数设置为标准时间
- getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6) getDay()是Date对象原型中的方法,所以只有Date或者Date的实例对象才可以调用
代码亲测有效,如有不对的地方,欢迎大家指证,前端新手希望和大家一起学习进步,
有时候我们需要的日期是活动的,比如说,查询过去一个月的营销记录,这个时候我们要的日期区间就是变化的,获取过去或者未来的日期通过程序来完成
/**
获取前 n 天 或者 后 n 天
@param dateNumber[number] 指定的时间长度
*/
function getDateStr(dateNumber){
var CUR_DATE = new Date();
CUR_DATE.setDate(CUR_DATE.getDate() + dateNumber); //CUR_DATE 设置为指定长度的日期
var resDate = CUR_DATE.format(); // format() 是自定义在Date构造函数上的方法
return resDate
}
setDate() 方法返回值是毫秒数,调用此方法的Date实例被设置为指定标准日期
最后在页面中使用
let start = getDateStr(-30) // 前30天的日期
let end = getDateStr(30) // 后30天的日期
let allDate = getDateAll(start,end) // start - end 所有的日期