javascript 日期处理

本文详细介绍JavaScript中的Date对象及其使用方法,包括日期格式转换、日期加法等实用技巧,并提供了一个强大的日期范围工具类,帮助开发者高效处理日期相关任务。

一:Date对象

 

Date 对象用于处理日期和时间。
创建 Date 对象的语法:
var myDate=new Date()
Date 对象会自动把当前日期和时间保存为其初始值。
参数形式有以下5种:   

   new Date("month dd,yyyy hh:mm:ss");
   new Date("month dd,yyyy");
   new Date(yyyy,mth,dd,hh,mm,ss);
   new Date(yyyy,mth,dd);
   new Date(ms);

注意最后一种形式,参数表示的是需要创建的时间和GMT时间1970年1月1日之间相差的毫秒数。各种函数的含义如下:

month:用英文表示月份名称,从January到December

mth:用整数表示月份,从(1月)到11(12月)

dd:表示一个月中的第几天,从1到31

yyyy:四位数表示的年份

hh:小时数,从0(午夜)到23(晚11点)

mm:分钟数,从0到59的整数

ss:秒数,从0到59的整数

ms:毫秒数,为大于等于0的整数

如:

new Date("January 12,2006 22:19:35");

new Date("January 12,2006");

new Date(2006,0,12,22,19,35);

new Date(2006,0,12);

new Date(1137075575000);

 

Date() 返回当日的日期和时间。  
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。  
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。  
getMonth() 从 Date 对象返回月份 (0 ~ 11)。  
getFullYear() 从 Date 对象以四位数字返回年份。 
getYear() 请使用 getFullYear() 方法代替。 
getHours() 返回 Date 对象的小时 (0 ~ 23)。  
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。  
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。  
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。  
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。  
getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。  
getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。  
getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。  
getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。  
getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。  
getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。  
getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。 
getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。  
getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。  
parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。 
setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。 
setMonth() 设置 Date 对象中月份 (0 ~ 11)。  
setFullYear() 设置 Date 对象中的年份(四位数字)。  
setYear() 请使用 setFullYear() 方法代替。  
setHours() 设置 Date 对象中的小时 (0 ~ 23)。  
setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。  
setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。  
setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。  
setTime() 以毫秒设置 Date 对象。  
setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。  
setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。  
setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。  
setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。  
setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。  
setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。  
setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。  
toSource() 返回该对象的源代码。  
toString() 把 Date 对象转换为字符串。  
toTimeString() 把 Date 对象的时间部分转换为字符串。  
toDateString() 把 Date 对象的日期部分转换为字符串。 
toGMTString() 请使用 toUTCString() 方法代替。 1 3 
toUTCString() 根据世界时,把 Date 对象转换为字符串。   
toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。  
toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。 
toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。 
UTC() 根据世界时返回 1997 年 1 月 1 日 到指定日期的毫秒数。 
valueOf() 返回 Date 对象的原始值。  
var objDate=new Date([arguments list]);

 

二:日期字符串转日期对象

1、eval转换 

<script type="text/javascript"> 
        //字符串转日期格式,strDate要转为日期格式的字符串 
        function getDate(strDate) { 
            var date = eval('new Date(' + strDate.replace(/\d+(?=-[^-]+$)/, 
             function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ')'); 
            return date; 
        } 
  
        //测试 
        alert(getDate("2012-05-09")); 
    </script> 

 2、Date.parse()

var strTime="2011-04-16"; //字符串日期格式           
var date= new Date(Date.parse(strTime.replace(/-/g,   "/"))); //转换成Data();

var month=date.getMonth()+1; //获取当前月份

 3、正则

function checkDate(text) {
    if (!text) return false;
    text = text.replace(/[\/-]0?/g, "/");
    if (!text.match(/^\d{4}\/\d{1,2}\/\d{1,2}$/)) return false;
    var d = new Date(text);
    return [d.getFullYear(), d.getMonth() + 1, d.getDate()].join("/") == text;
}

alert(checkDate('2010-02-10'));
alert(checkDate('2010/02/10'));

三、日期加法

//日期加法 此方法按月加,天数后面有个-1天,去掉后为正常值。
          //dtDate 原日期,NumDay 要加的数 以月为单位 
          function dateadd(dtDate, NumDay) {
              if (NumDay == 0) return;
              var dtTmp = new Date(dtDate.replace(/-/g, "/"));
              if (isNaN(dtTmp)) dtTmp = new Date();
              var dyear = 1;
              if (NumDay / 12 < 1) {
                  dyear = 0;
              }
              else {
                  dyear = (NumDay - NumDay % 12) / 12;
              }

              //按月加
              dtTmp = new Date(dtTmp.getFullYear() + parseInt(dyear), (dtTmp.getMonth()) + parseInt(NumDay % 12), dtTmp.getDate() - 1, dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());

              //按年加
              //dtTmp =   new   Date(dtTmp.getFullYear()+parseInt(NumDay/12),   dtTmp.getMonth(),   dtTmp.getDate()-1,   dtTmp.getHours(),   dtTmp.getMinutes(),   dtTmp.getSeconds());

              var mStr = new String(dtTmp.getMonth() + 1);
              var dStr = new String(dtTmp.getDate());
              if (mStr.length == 1) {
                  mStr = "0" + mStr;
              }
              if (dStr.length == 1) {
                  dStr = "0" + dStr;
              }
              return dtTmp.getFullYear() + "-" + mStr + "-" + dStr;

          }

四、扩展日期格式化

Date.prototype.format = function(format) //author: meizz 
            { 
              var o = { 
                "M+" : this.getMonth()+1, //month 
                "d+" : this.getDate(),    //day 
                "h+" : this.getHours(),   //hour 
                "m+" : this.getMinutes(), //minute 
                "s+" : this.getSeconds(), //second 
                "q+" : Math.floor((this.getMonth()+3)/3),  //quarter 
                "S" : this.getMilliseconds() //millisecond 
              } 
              if(/(y+)/.test(format)) format=format.replace(RegExp.$1, 
                (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 
              for(var k in o)if(new RegExp("("+ k +")").test(format)) 
                format = format.replace(RegExp.$1, 
                  RegExp.$1.length==1 ? o[k] : 
                    ("00"+ o[k]).substr((""+ o[k]).length)); 
              return format; 
            }

五、日期转换成长短格式

//2003-12-05
function
shortDateTime(id) { var str=$("#"+id).attr("value"); var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); if(r==null) return false; var d= new Date(r[1], r[3]-1, r[4]); return(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]); } //2003-12-05 13:04:06 function fulldateTime(id) { //debugger; var str=$("#"+id).attr("value"); var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/; var r = str.match(reg); if(r==null)return false; var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]); return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()==r[7]); }

 

/**
* 日期范围工具类
*/
var dateRangeUtil = (function () {
    /***
    * 获得当前时间
    */
    this.getCurrentDate = function () {
        return new Date();
    };

    /***
    * 获得本周起止时间
    */
    this.getCurrentWeek = function () {
        //起止日期数组  
        var startStop = new Array();
        //获取当前时间  
        var currentDate = this.getCurrentDate();
        //返回date是一周中的某一天  
        var week = currentDate.getDay();
        //返回date是一个月中的某一天  
        var month = currentDate.getDate();

        //一天的毫秒数  
        var millisecond = 1000 * 60 * 60 * 24;
        //减去的天数  
        var minusDay = week != 0 ? week - 1 : 6;
        //alert(minusDay);  
        //本周 周一  
        var monday = new Date(currentDate.getTime() - (minusDay * millisecond));
        //本周 周日  
        var sunday = new Date(monday.getTime() + (6 * millisecond));
        //添加本周时间  
        startStop.push(monday); //本周起始时间  
        //添加本周最后一天时间  
        startStop.push(sunday); //本周终止时间  
        //返回  
        return startStop;
    };

    /***
    * 获得本月的起止时间
    */
    this.getCurrentMonth = function () {
        //起止日期数组  
        var startStop = new Array();
        //获取当前时间  
        var currentDate = this.getCurrentDate();
        //获得当前月份0-11  
        var currentMonth = currentDate.getMonth();
        //获得当前年份4位年  
        var currentYear = currentDate.getFullYear();
        //求出本月第一天  
        var firstDay = new Date(currentYear, currentMonth, 1);


        //当为12月的时候年份需要加1  
        //月份需要更新为0 也就是下一年的第一个月  
        if (currentMonth == 11) {
            currentYear++;
            currentMonth = 0; //就为  
        } else {
            //否则只是月份增加,以便求的下一月的第一天  
            currentMonth++;
        }


        //一天的毫秒数  
        var millisecond = 1000 * 60 * 60 * 24;
        //下月的第一天  
        var nextMonthDayOne = new Date(currentYear, currentMonth, 1);
        //求出上月的最后一天  
        var lastDay = new Date(nextMonthDayOne.getTime() - millisecond);

        //添加至数组中返回  
        startStop.push(firstDay);
        startStop.push(lastDay);
        //返回  
        return startStop;
    };

    /**
    * 得到本季度开始的月份
    * @param month 需要计算的月份
    ***/
    this.getQuarterSeasonStartMonth = function (month) {
        var quarterMonthStart = 0;
        var spring = 0; //春  
        var summer = 3; //夏  
        var fall = 6;   //秋  
        var winter = 9; //冬  
        //月份从0-11  
        if (month < 3) {
            return spring;
        }

        if (month < 6) {
            return summer;
        }

        if (month < 9) {
            return fall;
        }

        return winter;
    };

    /**
    * 获得该月的天数
    * @param year年份
    * @param month月份
    * */
    this.getMonthDays = function (year, month) {
        //本月第一天 1-31  
        var relativeDate = new Date(year, month, 1);
        //获得当前月份0-11  
        var relativeMonth = relativeDate.getMonth();
        //获得当前年份4位年  
        var relativeYear = relativeDate.getFullYear();

        //当为12月的时候年份需要加1  
        //月份需要更新为0 也就是下一年的第一个月  
        if (relativeMonth == 11) {
            relativeYear++;
            relativeMonth = 0;
        } else {
            //否则只是月份增加,以便求的下一月的第一天  
            relativeMonth++;
        }
        //一天的毫秒数  
        var millisecond = 1000 * 60 * 60 * 24;
        //下月的第一天  
        var nextMonthDayOne = new Date(relativeYear, relativeMonth, 1);
        //返回得到上月的最后一天,也就是本月总天数  
        return new Date(nextMonthDayOne.getTime() - millisecond).getDate();
    };

    /**
    * 获得本季度的起止日期
    */
    this.getCurrentSeason = function () {
        //起止日期数组  
        var startStop = new Array();
        //获取当前时间  
        var currentDate = this.getCurrentDate();
        //获得当前月份0-11  
        var currentMonth = currentDate.getMonth();
        //获得当前年份4位年  
        var currentYear = currentDate.getFullYear();
        //获得本季度开始月份  
        var quarterSeasonStartMonth = this.getQuarterSeasonStartMonth(currentMonth);
        //获得本季度结束月份  
        var quarterSeasonEndMonth = quarterSeasonStartMonth + 2;

        //获得本季度开始的日期  
        var quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1);
        //获得本季度结束的日期  
        var quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, this.getMonthDays(currentYear, quarterSeasonEndMonth));
        //加入数组返回  
        startStop.push(quarterSeasonStartDate);
        startStop.push(quarterSeasonEndDate);
        //返回  
        return startStop;
    };

    /***
    * 得到本年的起止日期
    * 
    */
    this.getCurrentYear = function () {
        //起止日期数组  
        var startStop = new Array();
        //获取当前时间  
        var currentDate = this.getCurrentDate();
        //获得当前年份4位年  
        var currentYear = currentDate.getFullYear();

        //本年第一天  
        var currentYearFirstDate = new Date(currentYear, 0, 1);
        //本年最后一天  
        var currentYearLastDate = new Date(currentYear, 11, 31);
        //添加至数组  
        startStop.push(currentYearFirstDate);
        startStop.push(currentYearLastDate);
        //返回  
        return startStop;
    };

    /**
    * 返回上一个月的第一天Date类型
    * @param year 年
    * @param month 月
    **/
    this.getPriorMonthFirstDay = function (year, month) {
        //年份为0代表,是本年的第一月,所以不能减  
        if (month == 0) {
            month = 11; //月份为上年的最后月份  
            year--; //年份减1  
            return new Date(year, month, 1);
        }
        //否则,只减去月份  
        month--;
        return new Date(year, month, 1); ;
    };

    /**
    * 获得上一月的起止日期
    * ***/
    this.getPreviousMonth = function () {
        //起止日期数组  
        var startStop = new Array();
        //获取当前时间  
        var currentDate = this.getCurrentDate();
        //获得当前月份0-11  
        var currentMonth = currentDate.getMonth();
        //获得当前年份4位年  
        var currentYear = currentDate.getFullYear();
        //获得上一个月的第一天  
        var priorMonthFirstDay = this.getPriorMonthFirstDay(currentYear, currentMonth);
        //获得上一月的最后一天  
        var priorMonthLastDay = new Date(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth(), this.getMonthDays(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth()));
        //添加至数组  
        startStop.push(priorMonthFirstDay);
        startStop.push(priorMonthLastDay);
        //返回  
        return startStop;
    };


    /**
    * 获得上一周的起止日期
    * **/
    this.getPreviousWeek = function () {
        //起止日期数组  
        var startStop = new Array();
        //获取当前时间  
        var currentDate = this.getCurrentDate();
        //返回date是一周中的某一天  
        var week = currentDate.getDay();
        //返回date是一个月中的某一天  
        var month = currentDate.getDate();
        //一天的毫秒数  
        var millisecond = 1000 * 60 * 60 * 24;
        //减去的天数  
        var minusDay = week != 0 ? week - 1 : 6;
        //获得当前周的第一天  
        var currentWeekDayOne = new Date(currentDate.getTime() - (millisecond * minusDay));
        //上周最后一天即本周开始的前一天  
        var priorWeekLastDay = new Date(currentWeekDayOne.getTime() - millisecond);
        //上周的第一天  
        var priorWeekFirstDay = new Date(priorWeekLastDay.getTime() - (millisecond * 6));

        //添加至数组  
        startStop.push(priorWeekFirstDay);
        startStop.push(priorWeekLastDay);

        return startStop;
    };

    /**
    * 得到上季度的起始日期
    * year 这个年应该是运算后得到的当前本季度的年份
    * month 这个应该是运算后得到的当前季度的开始月份
    * */
    this.getPriorSeasonFirstDay = function (year, month) {
        var quarterMonthStart = 0;
        var spring = 0; //春  
        var summer = 3; //夏  
        var fall = 6;   //秋  
        var winter = 9; //冬  
        //月份从0-11  
        switch (month) {//季度的其实月份  
            case spring:
                //如果是第一季度则应该到去年的冬季  
                year--;
                month = winter;
                break;
            case summer:
                month = spring;
                break;
            case fall:
                month = summer;
                break;
            case winter:
                month = fall;
                break;

        };

        return new Date(year, month, 1);
    };

    /**
    * 得到上季度的起止日期
    * **/
    this.getPreviousSeason = function () {
        //起止日期数组  
        var startStop = new Array();
        //获取当前时间  
        var currentDate = this.getCurrentDate();
        //获得当前月份0-11  
        var currentMonth = currentDate.getMonth();
        //获得当前年份4位年  
        var currentYear = currentDate.getFullYear();
        //上季度的第一天  
        var priorSeasonFirstDay = this.getPriorSeasonFirstDay(currentYear, currentMonth);
        //上季度的最后一天  
        var priorSeasonLastDay = new Date(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2, this.getMonthDays(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2));
        //添加至数组  
        startStop.push(priorSeasonFirstDay);
        startStop.push(priorSeasonLastDay);
        return startStop;
    };

    /**
    * 得到去年的起止日期
    * **/
    this.getPreviousYear = function () {
        //起止日期数组  
        var startStop = new Array();
        //获取当前时间  
        var currentDate = this.getCurrentDate();
        //获得当前年份4位年  
        var currentYear = currentDate.getFullYear();
        currentYear--;
        var priorYearFirstDay = new Date(currentYear, 0, 1);
        var priorYearLastDay = new Date(currentYear, 11, 1);
        //添加至数组  
        startStop.push(priorYearFirstDay);
        startStop.push(priorYearLastDay);
        return startStop;
    };

    return this;
})();

--使用
$("#startDate").val(dateRangeUtil.getCurrentMonth()[0].Format("yyyy-MM-dd"));
    $("#endDate").val(dateRangeUtil.getCurrentMonth()[1].Format("yyyy-MM-dd"));

  

 

 

转载于:https://www.cnblogs.com/loner/articles/2957745.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值