日期:2014-05-16  浏览次数:20507 次

[转载]DataFormat类,实现js中Date的各种format
/** 
 * 此JS文件是格式化JS中日期时间的工具类,其中包含了传入日期对象Date,格式化成想要的格式,<br> 
 * 或者传入字符串格式的时间个,次字符串日期对应的格式可以转换为相应的日期对象,<br> 
 * 可以计算两个日期之间的差值 
 *  
 * y: 表示年 
 * M:表示一年中的月份 1~12 
 * d: 表示月份中的天数 1~31 
 * H:表示一天中的小时数 00~23 
 * m: 表示小时中的分钟数 00~59 
 * s: 表示分钟中的秒数   00~59 
 */  
    
  var DateFormat = function(bDebug){  
      this.isDebug = bDebug || false;  
      this.curDate = new Date();  
  }  
   
 DateFormat.prototype = {  
    //定义一些常用的日期格式的常量   
    DEFAULT_DATE_FORMAT: 'yyyy-MM-dd',  
    DEFAULT_MONTH_FORMAT: 'yyyy-MM',  
    DEFAULT_YEAR_FORMAT: 'yyyy',  
    DEFAULT_TIME_FORMAT: 'HH:mm:ss',  
    DEFAULT_DATETIME_FORMAT: 'yyyy-MM-dd HH:mm:ss',  
    DEFAULT_YEAR: 'YEAR',  
    DEFAULT_MONTH: 'MONTH',  
    DEFAULT_DATE: 'DATE',  
    DEFAULT_HOUR: 'HOUR',  
    DEFAULT_MINUTE: 'MINUTE',  
    DEFAULT_SECOND: 'SECOND',  
      
    /** 
     * 根据给定的日期时间格式,格式化当前日期 
     * @params strFormat 格式化字符串, 如:"yyyy-MM-dd" 默认格式为:“yyyy-MM-dd HH:mm:ss” 
     * @return 返回根据给定格式的字符串表示的时间日期格式<br> 
     *         如果传入不合法的格式,则返回日期的字符串格式{@see Date#toLocaleString()} 
     */  
     formatCurrentDate: function(strFormat){  
       try{  
          var tempFormat = strFormat == undefined? this.DEFAULT_DATETIME_FORMAT: strFormat;  
          var dates = this.getDateObject(this.curDate);  
          if(/(y+)/.test(tempFormat)){  
             var fullYear = this.curDate.getFullYear() + '';  
             var year = RegExp.$1.length == 4? fullYear: fullYear.substr(4 - RegExp.$1.length);  
             tempFormat = tempFormat.replace(RegExp.$1, year);  
          }  
          for(var i in dates){  
             if(new RegExp('(' + i + ')').test(tempFormat)){  
                var target = RegExp.$1.length == 1? dates[i]: ('0' + dates[i]).substr(('' + dates[i]).length - 1);  
                tempFormat = tempFormat.replace(RegExp.$1, target);  
             }  
          }  
          return tempFormat === strFormat? this.curDate.toLocaleString(): tempFormat;  
       }catch(e){  
          this.debug('格式化日期出现异常:' + e.message);  
       }  
    },  
      
      
    /** 
     * 根据给定的格式,把给定的时间进行格式化 
     * @params date 要格式化的日期 
     * @params strFormat 要得到的日期的格式的格式化字符串,如:'yyyy-MM-dd',默认:yyyy-MM-dd HH:mm:ss 
     * @return 根据规定格式的时间格式 
     *   
     * @updateDate 2011-09-15 
     */  
    format: function(date, strFormat){  
     try{  
        if(date == undefined){  
           this.curDate = new Date();  
        }else if(!(date instanceof Date)){  
           this.debug('你输入的date:' + date + '不是日期类型');  
           return date;  
        }else{  
           this.curDate = date;  
        }  
        return this.formatCurrentDate(strFormat);  
     }catch(e){  
        this.debug('格式化日期出现异常:' + e.message);  
     }  
    },  
      
    /** 
     * 根据给定的格式对给定的字符串日期时间进行解析, 
     * @params strDate 要解析的日期的字符串表示,此参数只能是字符串形式的日期,否则返回当期系统日期 
     * @params strFormat 解析给定日期的顺序, 如果输入的strDate的格式为{Date.parse()}方法支持的格式,<br> 
     *         则可以不传入,否则一定要传入与strDate对应的格式, 若不传入格式则返回当期系统日期。 
     * @return 返回解析后的Date类型的时间<br> 
     *        若不能解析则返回当前日期<br> 
     *        若给定为时间格式 则返回的日期为 1970年1月1日的日期 
     * 
     * bug: 此方法目前只能实现类似'yyyy-MM-dd'格式的日期的转换,<br> 
     *       而'yyyyMMdd'形式的日期,则不能实现 
     */  
       
    parseDate: function(strDate, strFormat){  
       if(typeof strDate != 'string'){  
            return new Date();  
       }  
      var longTime = Date.parse(strDate);  
      if(isNaN(longTime)){  
          if(strFormat == undefined){  
              this.debug('请输入日期的格式');  
             return new Date();  
          }  
          var tmpDate = new Date();  
          var regFormat = /(\w{4})|(\w{2})|(\w{1})/g;  
          var regDate = /(\d{4})|(\d{2})|(\d{1})/g;  
          var formats = strFormat.match(regFormat);  
          var dates = strDate.match(regDate);  
          if( formats != undefined &&  dates != undefined && for