posts - 59, comments - 244, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          js日期處理類

          Posted on 2013-01-16 01:15 penngo 閱讀(3621) 評論(1)  編輯  收藏 所屬分類: javascript
          將平時自己寫的和網上收集的一些日期處理方法整理成DateUtil.js
          /**
          * 日期處理工具類
          */

          var DateUtil = function(){

              /**
               * 判斷閏年
               * @param date Date日期對象
               * @return boolean true 或false
               
          */
              this.isLeapYear = function(date){
                  return (0==date.getYear()%4&&((date.getYear()%100!=0)||(date.getYear()%400==0))); 
              }
              
              /**
               * 日期對象轉換為指定格式的字符串
               * @param f 日期格式,格式定義如下 yyyy-MM-dd HH:mm:ss
               * @param date Date日期對象, 如果缺省,則為當前時間
               *
               * YYYY/yyyy/YY/yy 表示年份  
               * MM/M 月份  
               * W/w 星期  
               * dd/DD/d/D 日期  
               * hh/HH/h/H 時間  
               * mm/m 分鐘  
               * ss/SS/s/S 秒  
               * @return string 指定格式的時間字符串
               
          */
              this.dateToStr = function(formatStr, date){
                  formatStr = arguments[0] || "yyyy-MM-dd HH:mm:ss";
                  date = arguments[1] || new Date();
                  var str = formatStr;   
                  var Week = ['日','一','二','三','四','五','六'];  
                  str=str.replace(/yyyy|YYYY/,date.getFullYear());   
                  str=str.replace(/yy|YY/,(date.getYear() % 100)>9?(date.getYear() % 100).toString():'0' + (date.getYear() % 100));   
                  str=str.replace(/MM/,date.getMonth()>9?(date.getMonth() + 1):'0' + (date.getMonth() + 1));   
                  str=str.replace(/M/g,date.getMonth());   
                  str=str.replace(/w|W/g,Week[date.getDay()]);   
                
                  str=str.replace(/dd|DD/,date.getDate()>9?date.getDate().toString():'0' + date.getDate());   
                  str=str.replace(/d|D/g,date.getDate());   
                
                  str=str.replace(/hh|HH/,date.getHours()>9?date.getHours().toString():'0' + date.getHours());   
                  str=str.replace(/h|H/g,date.getHours());   
                  str=str.replace(/mm/,date.getMinutes()>9?date.getMinutes().toString():'0' + date.getMinutes());   
                  str=str.replace(/m/g,date.getMinutes());   
                
                  str=str.replace(/ss|SS/,date.getSeconds()>9?date.getSeconds().toString():'0' + date.getSeconds());   
                  str=str.replace(/s|S/g,date.getSeconds());   
                
                  return str;   
              }

              
              /**
              * 日期計算  
              * @param strInterval string  可選值 y 年 m月 d日 w星期 ww周 h時 n分 s秒  
              * @param num int
              * @param date Date 日期對象
              * @return Date 返回日期對象
              
          */
              this.dateAdd = function(strInterval, num, date){
                  date =  arguments[2] || new Date();
                  switch (strInterval) { 
                      case 's' :return new Date(date.getTime() + (1000 * num));  
                      case 'n' :return new Date(date.getTime() + (60000 * num));  
                      case 'h' :return new Date(date.getTime() + (3600000 * num));  
                      case 'd' :return new Date(date.getTime() + (86400000 * num));  
                      case 'w' :return new Date(date.getTime() + ((86400000 * 7) * num));  
                      case 'm' :return new Date(date.getFullYear(), (date.getMonth()) + num, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());  
                      case 'y' :return new Date((date.getFullYear() + num), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());  
                  }  
              }  
              
              /**
              * 比較日期差 dtEnd 格式為日期型或者有效日期格式字符串
              * @param strInterval string  可選值 y 年 m月 d日 w星期 ww周 h時 n分 s秒  
              * @param dtStart Date  可選值 y 年 m月 d日 w星期 ww周 h時 n分 s秒
              * @param dtEnd Date  可選值 y 年 m月 d日 w星期 ww周 h時 n分 s秒 
              
          */
              this.dateDiff = function(strInterval, dtStart, dtEnd) {   
                  switch (strInterval) {   
                      case 's' :return parseInt((dtEnd - dtStart) / 1000);  
                      case 'n' :return parseInt((dtEnd - dtStart) / 60000);  
                      case 'h' :return parseInt((dtEnd - dtStart) / 3600000);  
                      case 'd' :return parseInt((dtEnd - dtStart) / 86400000);  
                      case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7));  
                      case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);  
                      case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear();  
                  }  
              }

              /**
              * 字符串轉換為日期對象
              * @param date Date 格式為yyyy-MM-dd HH:mm:ss,必須按年月日時分秒的順序,中間分隔符不限制
              
          */
              this.strToDate = function(dateStr){
                  var data = dateStr;  
                  var reCat = /(\d{1,4})/gm;   
                  var t = data.match(reCat);
                  t[1] = t[1] - 1;
                  eval('var d = new Date('+t.join(',')+');');
                  return d;
              }

              /**
              * 把指定格式的字符串轉換為日期對象yyyy-MM-dd HH:mm:ss
              * 
              
          */
              this.strFormatToDate = function(formatStr, dateStr){
                  var year = 0;
                  var start = -1;
                  var len = dateStr.length;
                  if((start = formatStr.indexOf('yyyy')) > -1 && start < len){
                      year = dateStr.substr(start, 4);
                  }
                  var month = 0;
                  if((start = formatStr.indexOf('MM')) > -1  && start < len){
                      month = parseInt(dateStr.substr(start, 2)) - 1;
                  }
                  var day = 0;
                  if((start = formatStr.indexOf('dd')) > -1 && start < len){
                      day = parseInt(dateStr.substr(start, 2));
                  }
                  var hour = 0;
                  if( ((start = formatStr.indexOf('HH')) > -1 || (start = formatStr.indexOf('hh')) > 1) && start < len){
                      hour = parseInt(dateStr.substr(start, 2));
                  }
                  var minute = 0;
                  if((start = formatStr.indexOf('mm')) > -1  && start < len){
                      minute = dateStr.substr(start, 2);
                  }
                  var second = 0;
                  if((start = formatStr.indexOf('ss')) > -1  && start < len){
                      second = dateStr.substr(start, 2);
                  }
                  return new Date(year, month, day, hour, minute, second);
              }


              /**
              * 日期對象轉換為毫秒數
              
          */
              this.dateToLong = function(date){
                  return date.getTime();
              }

              /**
              * 毫秒轉換為日期對象
              * @param dateVal number 日期的毫秒數 
              
          */
              this.longToDate = function(dateVal){
                  return new Date(dateVal);
              }

              /**
              * 判斷字符串是否為日期格式
              * @param str string 字符串
              * @param formatStr string 日期格式, 如下 yyyy-MM-dd
              
          */
              this.isDate = function(str, formatStr){
                  if (formatStr == null){
                      formatStr = "yyyyMMdd";    
                  }
                  var yIndex = formatStr.indexOf("yyyy");     
                  if(yIndex==-1){
                      return false;
                  }
                  var year = str.substring(yIndex,yIndex+4);     
                  var mIndex = formatStr.indexOf("MM");     
                  if(mIndex==-1){
                      return false;
                  }
                  var month = str.substring(mIndex,mIndex+2);     
                  var dIndex = formatStr.indexOf("dd");     
                  if(dIndex==-1){
                      return false;
                  }
                  var day = str.substring(dIndex,dIndex+2);     
                  if(!isNumber(year)||year>"2100" || year< "1900"){
                      return false;
                  }
                  if(!isNumber(month)||month>"12" || month< "01"){
                      return false;
                  }
                  if(day>getMaxDay(year,month) || day< "01"){
                      return false;
                  }
                  return true;   
              }
              
              this.getMaxDay = function(year,month) {     
                  if(month==4||month==6||month==9||month==11)     
                      return "30";     
                  if(month==2)     
                      if(year%4==0&&year%100!=0 || year%400==0)     
                          return "29";     
                      else     
                          return "28";     
                  return "31";     
              }     
              /**
              *    變量是否為數字
              
          */
              this.isNumber = function(str)
              {
                  var regExp = /^\d+$/g;
                  return regExp.test(str);
              }
              
              /**
              * 把日期分割成數組 [年、月、日、時、分、秒]
              
          */
              this.toArray = function(myDate)  
              {   
                  myDate = arguments[0] || new Date();
                  var myArray = Array();  
                  myArray[0] = myDate.getFullYear();  
                  myArray[1] = myDate.getMonth();  
                  myArray[2] = myDate.getDate();  
                  myArray[3] = myDate.getHours();  
                  myArray[4] = myDate.getMinutes();  
                  myArray[5] = myDate.getSeconds();  
                  return myArray;  
              }  
              
              /**
              * 取得日期數據信息  
              * 參數 interval 表示數據類型  
              * y 年 M月 d日 w星期 ww周 h時 n分 s秒  
              
          */
              this.datePart = function(interval, myDate)  
              {   
                  myDate = arguments[1] || new Date();
                  var partStr='';  
                  var Week = ['日','一','二','三','四','五','六'];  
                  switch (interval)  
                  {   
                      case 'y' :partStr = myDate.getFullYear();break;  
                      case 'M' :partStr = myDate.getMonth()+1;break;  
                      case 'd' :partStr = myDate.getDate();break;  
                      case 'w' :partStr = Week[myDate.getDay()];break;  
                      case 'ww' :partStr = myDate.WeekNumOfYear();break;  
                      case 'h' :partStr = myDate.getHours();break;  
                      case 'm' :partStr = myDate.getMinutes();break;  
                      case 's' :partStr = myDate.getSeconds();break;  
                  }  
                  return partStr;  
              }  
              
              /**
              * 取得當前日期所在月的最大天數  
              
          */
              this.maxDayOfDate = function(date)  
              {   
                  date = arguments[0] || new Date();
                  date.setDate(1);
                  date.setMonth(date.getMonth() + 1);
                  var time = date.getTime() - 24 * 60 * 60 * 1000;
                  var newDate = new Date(time);
                  return newDate.getDate();
              }
              
              return this;
          }();

          測試效果:
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
            <html>
            <head>
              <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
              <script type="text/javascript" src="./DateUtil.js" ></script>

              <script type="text/javascript">
                  
          var date = new Date(); 
                  document.write(
          "penngo test DateUtil.js=====================" + date + "<br/>");
                  document.write(
          "date========================================" + date + "<br/>");
                  document.write(
          "isLeapYear==================================" + DateUtil.isLeapYear(date) + "<br/>");
                  document.write(
          "dateToStr===================================" + DateUtil.dateToStr('yyyy-MM-dd HH:mm:ss', date) + "<br/>");
                  document.write(
          "dateAdd('d', 2, date)=======================" + DateUtil.dateToStr('yyyy-MM-dd HH:mm:ss', DateUtil.dateAdd('d', 2, date)) + "<br/>");
              
                  
          var date2 = DateUtil.dateAdd('s', 3, date);
                  document.write(
          "dateDiff('s', date, date2)==================" + DateUtil.dateDiff('s', date, date2) + "<br/>");
                  document.write(
          "strToDate('2013-01-16 00:27:23')============" + DateUtil.strToDate('2013-01-16 00:27:23') + "<br/>");
                  document.write(
          "strFormatToDate=============================" + DateUtil.strFormatToDate('yyyy-MM-dd HH:mm:ss', '2013-01-16 00:27:23') + "<br/>");
                  document.write(
          "dateToLong==================================" + DateUtil.dateToLong(date) + "<br/>");
                  document.write(
          "longToDate==================================" + DateUtil.longToDate(DateUtil.dateToLong(date)) + "<br/>");
                  document.write(
          "isDate('2013-01-16 00:27:23', 'yyyy-MM-dd HH:mm:ss')=" + DateUtil.isDate('2013-01-16', 'yyyy-MM-dd') + "<br/>");

                  document.write(
          "datePart====================================" + DateUtil.datePart('m', date) + "<br/>");
                  document.write(
          "maxDayOfDate================================" + DateUtil.maxDayOfDate(date) + "<br/>");
              
          </script>
            </head>
            <body>
            </body>
            </html>

          運行結果:
          ===========penngo test DateUtil.js==========
          date========================================Wed Jan 16 2013 01:14:23 GMT+0800 (中國標準時間)
          isLeapYear==================================false
          dateToStr===================================2013-01-16 01:14:23
          dateAdd('d', 2, date)=======================2013-01-18 01:14:23
          dateDiff('s', date, date2)==================3
          strToDate('2013-01-16 00:27:23')============Wed Jan 16 2013 00:27:23 GMT+0800 (中國標準時間)
          strFormatToDate=============================Wed Jan 16 2013 00:27:23 GMT+0800 (中國標準時間)
          dateToLong==================================1358270063903
          longToDate==================================Wed Jan 16 2013 01:14:23 GMT+0800 (中國標準時間)
          isDate('2013-01-16 00:27:23', 'yyyy-MM-dd HH:mm:ss')=true
          datePart====================================14
          maxDayOfDate================================31

          評論

          # re: js日期處理類  回復  更多評論   

          2013-01-18 08:40 by RoyPayne
          收了~多謝兄臺。
          主站蜘蛛池模板: 侯马市| 灌阳县| 白沙| 天津市| 黄山市| 四会市| 平凉市| 迁西县| 东港市| 抚宁县| 介休市| 东乌珠穆沁旗| 莱西市| 曲水县| 洞口县| 于都县| 房产| 桃园县| 武宣县| 金寨县| 盈江县| 虎林市| 筠连县| 山西省| 醴陵市| 巨鹿县| 盐城市| 麻城市| 甘泉县| 甘南县| 夏津县| 青州市| 江油市| 简阳市| 筠连县| 云梦县| 宜城市| 锡林郭勒盟| 阿图什市| 九寨沟县| 清新县|