关注前端 | 前端博客
当前位置: JavaScript > JS-Date常用方法总结

JS-Date常用方法总结

2018-07-22 分类:JavaScript 作者:管理员 阅读(48)

概要:本篇文章主要是自己总结的日期时间的一些常用的方法,需要了解Date请点击这里

日期时间常用方法总结 - date-commonJS

下载文件到本地

  • 验证类
  • 获取类
  • 工具类

一、验证类

  • 验证闰年
  • 验证年月日
  • 验证时分秒
  • 验证年月日时分秒

1.1 验证闰年 - isLeapYear()

1
2
3
4
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()

1
2
3
4
5
6
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()

1
2
3
4
5
6
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()

1
2
3
4
5
6
7
8
9
10
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)&&regTime.test(zs)
}

* 参数一个必填项,年月日时分秒格式,可以不为补零格式
* 严格验证
* 返回false或true

二、获取类

2.1 获取日期加减n天后的日期 - getBeAfDateByDate()

1
2
3
4
5
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()

1
2
3
4
5
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()

1
2
3
4
function getWeek(){
    var i=arguments[0]?new Date(arguments[0]).getDay():new Date().getDay()
    return ['日','一','二','三','四','五','六'][i]
}

* 参数一个,可选,给定日期
* 不传参数,则默认返回当前日期的星期
* 传参则返回给定日期的星期
* 返回当前日期或给定日期的星期

2.4 获取当前日期所在周任意星期对应的日期 - getWeekByDate()

1
2
3
4
5
6
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()

1
2
3
4
5
6
7
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()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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()

1
2
3
function getDaysByStamps(stamp1,stamp2){
    return parseInt(Math.abs(stamp2-stamp1)/1000/60/60/24)
}

* 两个参数,都是时间戳
* 返回两个时间戳相差的天数

2.8 获取两个日期相差多少天 - getDateDiff()

1
2
3
4
5
6
7
8
9
10
11
12
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()

1
2
3
4
5
6
7
8
9
10
11
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()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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()

1
2
3
4
5
6
7
8
9
10
11
12
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()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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日期结果

「两年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞(1) 打赏

感谢您让我添加个鸡腿!

支付宝
微信
1

感谢您让我添加个鸡腿!

支付宝
微信
标签:

上一篇:

下一篇:

共有 2 条评论 - JS-Date常用方法总结

  1. 轩陌 Mac OS X Chrome 67.0.3396.99

    不错,那个补0可以用es6的那个来做

    1. 散人笔记 Windows 7 搜狗浏览器 2.X

      @轩陌我有空补上去,最初的想的是兼容性好点

博客简介

一位不知名的前端工程师,专注全栈技术,分享各种所遇问题与个人心得,梦想成为一位知名大神!

最近更新

精彩评论

服务热线:
 177****6038

 QQ在线交流

 旺旺在线