今天做项目遇到了,获取相对于当前日期前30天的时间,结合网上资料,做了一份整理。
function getNowFormatDate(sdate,interval,caret) {
var patt1 = /^\d{4}-([0-1]?[0-9])-([0-3]?[0-9])$/; //判断输入的日期是否符合格式正则表达式
if(!(sdate && typeof(sdate) == "string" && patt1.test(sdate))){
sdate = new Date(); //不满足日期的则使用当前年月日
}
interval = isNaN(parseInt(interval)) ? 0 : parseInt(interval);//若没有输入间隔,则使用当前日
caret = (caret && typeof(caret) == "string") ? caret : "";
var gdate = new Date(sdate).getTime();//获取指定年月日
gdate = gdate + 1000*60*60*24*interval; //加减相差毫秒数
var speDate = new Date(gdate);//获取指定好毫秒数时间
var preYear = speDate.getFullYear();
var preMonth = speDate.getMonth() + 1;
var preDay = speDate.getDate();
preMonth = (preMonth < 10) ? ("0" + preMonth) :preMonth;
preDay = (preDay < 10) ? ("0" + preDay) :preDay;
var preDate = preYear + caret + preMonth + caret + preDay;
return preDate;
}
调用例子: 获取当天日期 getNowFormatDate("",0,"-"); 结果为"2018-09-18";
获取前一天日期 getNowFormatDate("2018-03-01",-1,"-"); 结果为"2018-02-18";
获取后一天日期 getNowFormatDate("2018-02-28",1,"-"); 结果为"2018-03-01";
获取前一周日期 getNowFormatDate("2018-03-01",-7,"-"); 结果为"2018-02-22";
获取后一周日期 getNowFormatDate("2018-03-01",7,"-"); 结果为"2018-03-08";
获取前30天日期 getNowFormatDate("2018-09-18",-30,"-"); 结果为"2018-02-22";
该函数的优点是通用性高,只要传入需要的指定时间、间隔日期即可,缺点是当获取前后一个月、三个月、一年等存在误差。
function getpreDate(sdate,monthNum,caret) {
var speYear = "";
var speMonth = "";
var speDate = "";
var patt1 = /^\d{4}-([0-1]?[0-9])-([0-3]?[0-9])$/;
if(!(sdate && typeof(sdate) == "string" && patt1.test(sdate))){
sdate = new Date();
speYear = sdate.getFullYear();
speMonth = sdate.getMonth() + 1;
speDate = sdate.getDate();
}
else{
var sdateAry = sdate.split("-");
speYear = parseInt(sdateAry[0]);
speMonth = parseInt(sdateAry[1]);
speDate = parseInt(sdateAry[2]);
}
monthNum = isNaN(parseInt(monthNum)) ? 0 : parseInt(monthNum);
caret = (caret && typeof(caret) == "string") ? caret : "";
var preYear = speYear;
var preMonth = speMonth - monthNum;
if(preMonth <= 0){ //如差的月份小于0,则将对应的年月做修改
preYear = preYear - (preMonth/12 > 0) ? preMonth/12 : 1;
preMonth = 12 - (Math.abs(preMonth)%12);
}
var preDate = speDate;
var preDates = new Date(preYear,preMonth,0);
var preDateAll = preDates.getDate(); //获取指定月份的总日数
if(preDate > preDateAll){ //若指定日大于指定月份所含有的天数,则使用指定月份最大的天数
preDate = preDateAll;
}
var preDate = preYear + caret + preMonth + caret + preDate;
return preDate;
}
该函数的优点是通用性高,只要传入需要的指定时间、指定间隔月份即可,月份中的天数不同不会影响最终结果所得月份
【1】Date():(1)作用:获取当前日期和时间; (2)语法:[1]Date()不传入任何参数的情况下,获取当前时刻的日期和时间; (2)Date(传入日期毫秒数)根据传入参数,创建特定日期和时间,获取日期毫秒数的简单方法可以是Date.parse()和Date.UTC(),还可以直接传入Number类型的毫秒数,其中Date.parse()中只要是常规的日期表示法,都可以正常转换,规则是支持年月日、月日年格式、日月年格式(该格式时月必须使用英文,不能使用数字),其中年月日之间的间隔可以是空格( )、反斜杠(/)、连字符-、逗号(,),月可以使用英文全写法和缩写法,暂不支持其他情况,例如"2018-09-18"(年月日的格式,还可以使用"2018 09 18"(其中空格可以换为逗号, 反斜杠/ 连字符-),但是不能直接使用20180918、"20180918"、2018/09/18、2018-09-18)、"September 18 2018"(月日年格式,月份也可以使用简写Sept.或Sept,还可以使用"09 18 2018"(其中空格可以换为逗号, 反斜杠/ 连字符-),但是不能使用"0918208"、"09\18\2018"); "18-Sept-2018" (日月年格式,其他月必须为英文全写或者简写,还可以使用"18 Sept 2018"(其中空格可以换为逗号, 反斜杠/ 连字符- 斜杠\ ),但是不能使用"18 09 2018") 其中Date.UTC()中参数是年,基于0的月份(0-11),月中的哪一天(1-31),小时数(0-23),分钟,秒,毫秒,其中年月必须,其他都可以使用默认值(天的默认值为1,其他全部为0) ,其中参数可以是Number类型也可以是Number类型; (3)Date(日期字符串) ,日期格式跟上的Date.parse一致,因为传入字符串后后台会自动调用Date.parse(); (4)Date(年,月,日,时,分,秒,毫秒数) ,日期格式跟上的Date.UTC一致,因为传入字符串后后台会自动调用Date.UTC();
【2】Date.now():返回调用该方法的日期和时间距离时间零点(1970-01-01 00:00:00 UTC),返回值类型为Number,支持的浏览器有IE9+、 Firefox 3+、 Safari 3+、 Opera 10.5 和 Chrome,在不支持的浏览器中可以使用 +模拟,例如 var t = +new Date(),Date.now() == (+new Date());其中是由于Date的valueOf()方法会转换为毫秒数,在进行日期计算以及比较时会自动调用该方法。
【3】一系列get类方法获取日期时间数据:(1)getFullYear():返回实例对象的四位年份,例如var t = (new Date("2018-09-18")).getFullYear(),t=2018; (2)getMonth()::返回实例对象的月份(0-11),例如:var t = (new Date("2018-09-18")).getMonth(),t=9; (3)getDate():返回实例对象对应月份的几号(1-31),例如:var t = (new Date("2018-09-18")).getDate(),t=18; (4)getHours():返回实例对象对应的小时数(0-23,例如:var t = (new Date()).getHours();t=21; (5)getMinutes:返回实例对象对应的分钟(0-59),例如:var t = (new Date()).getMinutes();t=30; (6)getSeconds():返回实例对象对应的秒数(0-59),例如:var t = (new Date()).getMinutes();t=53; (7)getMilliseconds():返回实例对象对应的秒数(0-999),例如:var t = (new Date()).getMilliseconds();t=957; (8)getDay():返回实例对象对应的星期几(星期日为0,星期一为1,值为0-6),例如:var t = (new Date("2018-09-18")).getDay(),t=2(表示星期三); (9)getTime():返回实例日期距离时间零点毫秒数(1970-01-01 00:00:00 UTC),等同于valueOf(),例如var t = (new Date("2018-09-18")).getTime(),t=1537228800000;注意:这些方法的返回值类型都是Number。
【4】一系列set类方法设置日期数据: