概要:本篇文章主要是自己总结的日期时间的一些常用的方法,需要了解Date请点击这里
日期时间常用方法总结 - date-commonJS
下载文件到本地
一、验证类
- 验证闰年
- 验证年月日
- 验证时分秒
- 验证年月日时分秒
1.1 验证闰年 - isLeapYear()
function isLeapYear(){
var y=arguments[0]?arguments[0].split(' ')[0].split(/[\_./-]/)[0]:new Date().getFullYear();
return y%4===0&&y%100!==0 || y%400===0
}
* 验证年份是否是闰年
* 参数一个可选,表示验证给定的年份 或 年月日 或 年月日时分秒,但只验证年份部分
* 不传参默认检查当前年份
* 返回false或true
1.2 验证年月日 - isValidDate()
function isValidDate(date){
var f=date.split(/[\_./-]/);
var s=f[0]+'-'+(f[1].length<2?'0'+f[1]:f[1])+'-'+(f[2].length<2?'0'+f[2]:f[2]);
var reg=/(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)/;
return reg.test(s)
}
* 参数一个必填项,年月日格式
* 严格验证
* 返回false或true
1.3 验证时分秒 - isValidTime()
function isValidTime(time){
var f=time.split(':');
var s=f[0]+':'+(f[1].length<2?'0'+f[1]:f[1])+':'+(f[2].length<2?'0'+f[2]:f[2]);
var reg=/^[0-2][0-3]:[0-5][0-9]:[0-5][0-9]$/;
return reg.test(s)
}
* 参数一个必填项,时分秒格式,可以不为补零格式
* 严格验证
* 返回false或true
1.4 验证年月日时分秒 - isValidateDateTime()
function isValidateDateTime(dateTime){
var a=dateTime.split(' ');
var f=a[0].split(/[\_./-]/);
var s=a[1].split(':');
var zf=f[0]+'-'+(f[1].length<2?'0'+f[1]:f[1])+'-'+(f[2].length<2?'0'+f[2]:f[2]);
var zs=s[0]+':'+(s[1].length<2?'0'+s[1]:s[1])+':'+(s[2].length<2?'0'+s[2]:s[2]);
var regDate=/(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)/;
var regTime=/^[0-2][0-3]:[0-5][0-9]:[0-5][0-9]$/;
return regDate.test(zf)&®Time.test(zs)
}
* 参数一个必填项,年月日时分秒格式,可以不为补零格式
* 严格验证
* 返回false或true
二、获取类
2.1 获取日期加减n天后的日期 - getBeAfDateByDate()
function getBeAfDateByDate(n){
var dt =arguments[1]?new Date(arguments[1]):new Date();
dt.setDate(dt.getDate() + n);
return dt.getFullYear()+'-'+(dt.getMonth()+1<10?'0'+(dt.getMonth()+1):(dt.getMonth()+1))+'-'+(dt.getDate()<10?'0'+dt.getDate():dt.getDate())
}
* 参数两个,第一个必填项,对日期的加减的天数n
* 第二个参数可选,给定日期,对给定的日期进行加减,不传则对当前日期进行加减
* n或+n :加天数,日期前n天;-n:减天数,日期后n天
* 返回加天数或减天数后的日期
2.2 获取日期加减n月后的日期 - getBeAfDateByMonth()
function getBeAfDateByMonth(n){
var dt =arguments[1]?new Date(arguments[1]): new Date();
dt.setMonth(dt.getMonth() + n);
return dt.getFullYear()+'-'+(dt.getMonth()+1<10?'0'+(dt.getMonth()+1):(dt.getMonth()+1))+'-'+(dt.getDate()<10?'0'+dt.getDate():dt.getDate())
}
* 参数两个,第一个必填项,对日期的加减的月数n
* 第二个参数可选,给定日期,对给定的日期进行加减,不传则对当前日期进行加减
* n或+n :加月数,日期前n月;-n:减天数,日期后n月
* 返回加n月数或减n月数后的日期
2.3 获取日期星期 - getWeek()
function getWeek(){
var i=arguments[0]?new Date(arguments[0]).getDay():new Date().getDay()
return ['日','一','二','三','四','五','六'][i]
}
* 参数一个,可选,给定日期
* 不传参数,则默认返回当前日期的星期
* 传参则返回给定日期的星期
* 返回当前日期或给定日期的星期
2.4 获取当前日期所在周任意星期对应的日期 - getWeekByDate()
function getWeekByDate(week){
var t=arguments[1]?new Date(arguments[1]):new Date()
var i=t.getDay()==0?7:t.getDay();
var week=week==0?7:week;
return i==week?t:(function(){t.setDate(t.getDate() -(i-week));return t})()
}
* 第一个参数n必填,星期一 ~ 星期日 对应参数是1 ~ 0
* 第二参数可选,表示给定日期,不填写默认为当前日期
* 返回当前日期或给定日期所在周任一星期n对应的日期
2.5 获取日期所在的月份有多少天 - getMaxDayOfDate()
function getMaxDayOfDate(){
var dt=arguments[0]?new Date(arguments[0]):new Date()
dt.setMonth(dt.getMonth() + 1)
dt.setDate(1)
dt.setDate(dt.getDate() -1)
return dt.getDate()
}
* 一个参数,可选,给定日期,不传参则返回当前日期所在月份的天数
* 返回当前月份或给定日期所在月份的最大天数
2.6 获取日期所在年的第几周 - getWeekNumOfYear()
function getWeekNumOfYear(){
if(arguments[0]){
var eStamp=new Date(arguments[0]).getTime();
var dt=new Date(arguments[0]);
dt.setMonth(0)
dt.setDate(1)
var sStamp=dt.getTime()
return Math.ceil(((eStamp-sStamp)/1000/24/60/60 + 1)/7)
}else{
var dt=new Date();
var eStamp=new Date(dt).getTime();
dt.setMonth(0)
dt.setDate(1)
var sStamp=dt.getTime()
return Math.ceil((eStamp-sStamp)/1000/24/60/60/7)
}
}
* 一个参数,可选,给定日期,不传参则返回当前日期所在当前年份的周数
* 传参则返回当前日期或给定日期所在所在年份的周数
2.7 获取两个时间戳相差多少天 - getDaysByStamps()
function getDaysByStamps(stamp1,stamp2){
return parseInt(Math.abs(stamp2-stamp1)/1000/60/60/24)
}
* 两个参数,都是时间戳
* 返回两个时间戳相差的天数
2.8 获取两个日期相差多少天 - getDateDiff()
function getDateDiff(){
if(arguments.length===1){
var e=arguments[0].split(' ')[1]?arguments[0]:arguments[0]+' 00:00:00';
return parseInt(Math.abs(new Date().getTime() - new Date(e).getTime())/1000/24/60/60)
}else if(arguments.length===2){
var s=arguments[0].split(' ')[1]?arguments[0]:arguments[0]+' 00:00:00';
var e=arguments[1].split(' ')[1]?arguments[1]:arguments[1]+' 00:00:00';
return parseInt(Math.abs(new Date(s).getTime() - new Date(e).getTime())/1000/24/60/60)
}else{
return ''
}
}
* 两个参数,第一个参数必填项,开始日期
* 第二个参数,可选,为结束日期,不填写,则结束日期为当前日期
* 返回开始日期到当前日期或给定日期相差的天数
2.9 获取两个日期之间所有日期 - getAllDatesBetween()
function getAllDatesBetween(startDate,endDate){
var arr=[];
var now=new Date();
var endDate=endDate?endDate:(now.getFullYear()+'-'+(now.getMonth()+1)+'-'+now.getDate());
var days=parseInt(Math.abs(new Date(startDate.split(' ')[0]+' 00:00:00') - new Date(endDate.split(' ')[0]+' 00:00:00'))/1000/24/60/60)+1;
for(var i=0;i<days;i++){
var stamp=new Date(new Date(startDate).getTime()+i*86400000);
arr.push(stamp.getFullYear()+'-'+((stamp.getMonth()+1)<10?'0'+(stamp.getMonth()+1):(stamp.getMonth()+1))+'-'+(stamp.getDate()<10?'0'+stamp.getDate():stamp.getDate()))
}
return arr
}
* 两个参数,第一个参数必填项,开始日期
* 第二个参数,可选,为结束日期,不填写,则结束日期为当前日期
* 返回开始日期到当前日期或给定日期之间所有日期,格式为年月日
2.10 获取日期信息 - getDatePart()
function getDatePart(typeName){
var t=arguments[1]?new Date(arguments[1]):new Date();
switch(typeName) {
case '年':
return t.getFullYear();
break;
case '月':
return t.getMonth()+1;
break;
case '日':
return t.getDate();
break;
case '时':
return t.getHours();
break;
case '分':
return t.getMinutes();
break;
case '秒':
return t.getSeconds();
break;
default:
return '';
}
}
* 两个参数,第一个参数必填项,日期信息部分(年月日时分秒)
* 第二个参数,可选,为给定时间戳,
* 返回当前日期信息或返回时间戳转化成日期后的信息
三、工具类
3.1 日期转数组形式 - dateToArray()
function dateToArray(){
var d=new Date()
if(arguments.length===0){
return [d.getFullYear(),d.getMonth()+1,d.getDate(),d.getHours(),d.getMinutes(),d.getSeconds()]
}else if(arguments.length===1){
var s=arguments[0].split(' ')[1]?arguments[0]:arguments[0]+' 00:00:00';
var t=new Date(s);
return [t.getFullYear(),t.getMonth()+1,t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds()]
}else{
return ''
}
}
* 一个参数,可选,为给定日期
* 不传参,则返回当前日期数组化的结果,传参则返回给定日期数组化的结果
* 返回当前日期信息或给定日期数组化的结果
3.2 日期格式化标准的补零2位 - dateToStandard()
function dateToStandard(){
if(arguments[0]){
var t=arguments[0].split(' ');
}else{
var dt=new Date();
var t=[dt.getFullYear()+'-'+(dt.getMonth()+1)+'-'+dt.getDate(),dt.getHours()+':'+dt.getMinutes()+':'+dt.getSeconds()]
}
var f=t[0].split(/[\_./-]/);
if(t[1]){
var s=t[1].split(':');
return f[0]+'-'+(f[1].length<2?'0'+f[1]:f[1])+'-'+(f[2].length<2?'0'+f[2]:f[2])+' '+(s[0].length<2?'0'+s[0]:s[0])+':'+(s[1].length<2?'0'+s[1]:s[1])+':'+(s[2].length<2?'0'+s[2]:s[2])
}else{
return f[0]+'-'+(f[1].length<2?'0'+f[1]:f[1])+'-'+(f[2].length<2?'0'+f[2]:f[2])+' 00:00:00'
}
}
* 一个参数,可选,为给定日期
* 不传参,则返回当前日期格式化后的结果,格式为:yyyy-MM-dd hh:mm:ss
* 传一个不是标准的补零格式日期,则返回格式为yyyy-MM-dd hh:mm:ss的日期
3.3 日期格式化 - dateFormat()
function dateFormat(format){
var d=new Date();
var t=arguments[1]?new Date(arguments[1]):d;
var date = {
"M+": t.getMonth() + 1,
"d+": t.getDate(),
"h+": t.getHours(),
"m+": t.getMinutes(),
"s+": t.getSeconds(),
"q+": Math.floor((t.getMonth() + 3) / 3),
"S+": t.getMilliseconds()
};
if (/(y+)/i.test(format)) {
format = format.replace(RegExp.$1, (t.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (var k in date) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1? date[k] : ("00" + date[k]).substr(("" + date[k]).length));
}
}
return format;
}
* 两个参数,第一个必填项,日期格式
* 第二个参数,可选,给定时间戳,不填写则返回格式化当前日期的yyyy-MM-dd hh:mm:ss日期结果,
* 填写则返回时间戳转化yyyy-MM-dd hh:mm:ss日期结果
「三年博客,如果觉得我的文章对您有用,请帮助本站成长」
不错,那个补0可以用es6的那个来做
@轩陌我有空补上去,最初的想的是兼容性好点