`
mglslg
  • 浏览: 15889 次
  • 性别: Icon_minigender_2
  • 来自: 内蒙古
社区版块
存档分类
最新评论

[转载]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 && formats.length == dates.length){  
            for(var i = 0; i < formats.length; i++){  
              var format = formats[i];  
              if(format === 'yyyy'){  
                tmpDate.setFullYear(parseInt(dates[i], 10));  
              }else if(format == 'yy'){  
                var prefix = (tmpDate.getFullYear() + '').substring(0, 2);  
                var year = (parseInt(dates[i], 10) + '').length == 4? parseInt(dates[i], 10): prefix + (parseInt(dates[i], 10) + '00').substring(0, 2);  
                var tmpYear = parseInt(year, 10);  
                tmpDate.setFullYear(tmpYear);  
              }else if(format == 'MM' || format == 'M'){  
                tmpDate.setMonth(parseInt(dates[i], 10) - 1);  
              }else if(format == 'dd' || format == 'd'){  
                tmpDate.setDate(parseInt(dates[i], 10));  
              }else if(format == 'HH' || format == 'H'){  
                tmpDate.setHours(parseInt(dates[i], 10));  
              }else if(format == 'mm' || format == 'm'){  
                tmpDate.setMinutes(parseInt(dates[i], 10));  
              }else if(format == 'ss' || format == 's'){  
                tmpDate.setSeconds(parseInt(dates[i], 10));  
              }  
            }  
           return tmpDate;  
         }  
          return tmpDate;  
        }else{  
          return new Date(longTime);  
        }  
    },  
      
      
    /** 
     * 根据给定的时间间隔类型及间隔值,以给定的格式对给定的时间进行计算并格式化返回 
     * @params date 要操作的日期时间可以为时间的字符串或者{@see Date}类似的时间对象, 
     * @params interval 时间间隔类型如:"YEAR"、"MONTH"、 "DATE", 不区分大小写 
     * @params amount 时间间隔值,可以正数和负数, 负数为在date的日期减去相应的数值,正数为在date的日期上加上相应的数值 
     * @params strFormat 当输入端的date的格式为字符串是,此项必须输入。若date参数为{@see Date}类型是此项会作为最终输出的格式。 
     * @params targetFormat 最终输出的日期时间的格式,若没有输入则使用strFormat或者默认格式'yyyy-MM-dd HH:mm:ss' 
     * @return 返回计算并格式化后的时间的字符串 
     */  
    changeDate: function(date, interval, amount, strFormat, targetFormat){  
        var tmpdate = new Date();  
        if(date == undefined){  
           this.debug('输入的时间不能为空!');  
           return new Date();  
        }else if(typeof date == 'string'){  
            tmpdate = this.parseDate(date, strFormat);  
        }else if(date instanceof Date){  
          tmpdate = date;  
        }  
        var field  =  (typeof interval == 'string')? interval.toUpperCase(): 'DATE';  
          
        try{  
          amount = parseInt(amount + '', 10);  
          if(isNaN(amount)){  
             amount = 0;  
          }  
        }catch(e){  
           this.debug('你输入的[amount=' + amount + ']不能转换为整数');  
           amount = 0;  
        }  
        switch(field){  
           case this.DEFAULT_YEAR:  
             tmpdate.setFullYear(tmpdate.getFullYear() + amount);  
             break;  
           case this.DEFAULT_MONTH:  
             tmpdate.setMonth(tmpdate.getMonth() + amount);  
             break;  
           case this.DEFAULT_DATE:  
             tmpdate.setDate(tmpdate.getDate() + amount);  
             break;  
           case this.DEFAULT_HOUR:  
             tmpdate.setHours(tmpdate.getHours() + amount);  
             break;  
           case this.DEFAULT_MINUTE:  
             tmpdate.setMinutes(tmpdate.getMinutes() + amount);  
             break;  
           case this.DEFAULT_SECOND:  
              tmpdate.setSeconds(tmpdate.getSeconds() + amount);  
             break;  
           default:  
              this.debug('你输入的[interval:' + field + '] 不符合条件!');          
        }  
          
        this.curDate = tmpdate;  
        return this.formatCurrentDate(targetFormat == undefined? strFormat: targetFormat);  
    },  
      
    /** 
     * 比较两个日期的差距 
     * @param date1 Date类型的时间 
     * @param date2 Dete 类型的时间 
     * @param isFormat boolean 是否对得出的时间进行格式化,<br>  
     *       false:返回毫秒数,true:返回格式化后的数据 
     * @return 返回两个日期之间的毫秒数 或者是格式化后的结果 
     */  
    compareTo: function(date1, date2, isFormat){  
      try{  
            var len = arguments.length;  
            var tmpdate1 = new Date();  
            var tmpdate2 = new Date();  
            if(len == 1){  
               tmpdate1 = date1;  
            }else if(len >= 2){  
              tmpdate1 = date1;  
              tmpdate2 = date2;  
            }  
        if(!(tmpdate1 instanceof Date) || !(tmpdate2 instanceof Date)){  
           return 0;  
        }else{  
            var time1 = tmpdate1.getTime();   
            var time2 = tmpdate2.getTime();  
            var time = Math.max(time1, time2) - Math.min(time1, time2);  
            if(!isNaN(time) && time > 0){  
               if(isFormat){  
                  var date = new Date(time);  
                  var result = {};  
                  result['year']   = (date.getFullYear() - 1970) > 0? (date.getFullYear() - 1970): '0';  
                  result['month']  = (date.getMonth() - 1) > 0? (date.getMonth() - 1): '0';  
                  result['day']    = (date.getDate() - 1) > 0? (date.getDate() - 1): '0';  
                  result['hour']   = (date.getHours() - 8) > 0? (date.getHours() - 1): '0';  
                  result['minute'] = date.getMinutes() > 0? date.getMinutes(): '0';  
                  result['second'] = date.getSeconds() > 0? date.getSeconds(): '0';  
                  return result;  
                }else {  
                 return time;  
                }  
            }else{  
              return 0;  
            }  
        }  
      }catch(e){  
        this.debug('比较时间出现异常' + e.message);  
      }  
    },  
      
    /** 
     * 根据给定的日期得到日期的月,日,时,分和秒的对象 
     * @params date 给定的日期 date为非Date类型, 则获取当前日期 
     * @return 有给定日期的月、日、时、分和秒组成的对象 
     */  
    getDateObject: function(date){  
         if(!(date instanceof Date)){  
           date = new Date();  
         }  
        return {  
            'M+' : date.getMonth() + 1,   
            'd+' : date.getDate(),     
            'H+' : date.getHours(),     
            'm+' : date.getMinutes(),   
            's+' : date.getSeconds()  
         };  
    },  
      
    /** 
     *在控制台输出日志 
     *@params message 要输出的日志信息 
     */  
    debug: function(message){  
       try{  
           if(!this.isDebug){  
             return;  
           }  
           if(!window.console){  
               window.console = {};  
               window.console.log = function(){  
                  return;  
               }  
           }  
           window.console.log(message + ' ');  
       }catch(e){  
       }  
    }  
}  

分享到:
评论

相关推荐

    优化Vue中date format的性能详解

    主要介绍了优化Vue中date format的性能详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    jquery-dateFormat, 使用JavaScript格式化日期输出的jQuery插件.zip

    jquery-dateFormat, 使用JavaScript格式化日期输出的jQuery插件 使用JavaScript格式输出日期输出的jQuery dateformat插件- 拥有的,jQuery是最小的日期格式库。 ! 安装下载最新的jquery.dateFormat.js 或者 jquery....

    Node.js-dateformat-一个优秀的node.js日期格化包

    dateformat - 一个优秀的node.js日期格化包

    利用fecha进行JS日期处理

    目前在项目中我们使用了fecha来进行日期处理,并对fecha进行了重新封装,满足项目中的实际需求。 fecha介绍 fecha是一个日期格式化和解析的js库,它提供了强大的日期处理功能,功能强大且只有2k大小。安装方式简单,...

    Beginning.JavaScript.5th.Edition

    Title: Beginning JavaScript, 5th Edition Author: Jeremy McPeak Length: 768 pages Edition: 5 Language: English Publisher: Wrox Publication Date: 2015-03-09 ISBN-10: 1118903331 ISBN-13: 9781118903339 ...

    javascript服务器交互型可编辑表格和js常用库

    data="+BaseJs.encode(data)); return false; }, afterCallback : function(mo) { alert("提交修改后的数据:"+mo); //document.location.reload(); } }, // 删除操作 delAction : { button : ...

    原创-javascript服务器交互型可编辑表格和我的js常用库

    自己常用的js库和写的一个交互型可编辑表格: BaseJs库的一点源码: /** * 自定义javascript常用基础库 author zhang_jhai 创建时间 2010/04/10 最后修改时间 2010/05/03 * version 2.0 */ // Base库基础类 BaseJs ...

    Ext Js权威指南(.zip.001

    8.1.3 格式化输出数据:ext.string、ext.number、ext.date和ext.util.format / 389 8.1.4 超级模板:ext.xtemplate(包括ext.xtemplateparser和ext.xtemplatecompiler) / 393 8.1.5 模板的方法 / 396 8.2 组件...

    Eloquent Javascript, 3rd Edition

    Like any good programming book, Eloquent JavaScript begins with fundamentals--variables, control structures, functions, and data structures--then moves on to complex topics like object-oriented ...

    Export2excel.js和Blob.js

    const data = that.formatJson(filterVal, list) let time1 = '' let time2 = '' /* if (this.start !== '') { time1 = that.moment(that.start).format('YYYY-MM-DD') } if (this.end !== '') { time2 = ...

    DateFormat:日期格式--javascript js

    DateFormat Date Format是一个日期格式化的库. 提供的全局的接口DateFormat(DF)....1、DataFormat静态方法 DF.format(d, 'dd.MM.yyyy. HH:mm:ss.zzz'); // 31.07.2013. 10:48:19.751 DF.format(d, 'yyyy年M月

    javascript util

    var result = (new Date()).format("yyyy年MM月dd日 hh:mm:ss"); 获取元素遍历: $("ul li").each(function(n,i){ alert("元素是:" + n + ",索引是:" + i); }); 事件绑定: util("#id").on("click", function(){alert...

    VideoLineForJS:VideoLineForJS 视频轴JS版 视频回放轴 海康威视 海康

    console.log(new Date(time).format("yyyy-MM-dd HH:mm:ss")); }); var data=[{ start:new Date().getTime()-3600*1000*5, end:new Date().getTime()-3600*1000*4-1800*100 },{ start:new Date().getTime()-...

    react-growth-analytics:生成分析的工具

    React分析 显示分析工具 安装 通过运行以下命令安装软件包: ...type dataFormat = DayData [ ] ; CohortConverter ( ( data : dataFormat ) , ( cohortLength : number ) , ( outputAsAPercentage

    Problem Solving in Data Structures & Algorithms Using Java, 2nd Edition

    Problem Solving in Data Structures & Algorithms Using Java, 2nd Edition By 作者: Hemant Jain Pub Date: 2018 ISBN: n/a Pages: 649 Language: English Format: EPUB/AZW3 Size: 10 Mb ASIN: B07HRNP1WW ...

    玩转模板--自动代码生成工程

    通过修改VelocityUtils类实现.可以自由用户自定义工具,丰富模板参数的处理,如在日期输出时对其进行格式化输出 例如: VelocityContext context = new VelocityContext(map); context.put("dateTool", new DateTool...

    piwigo-videojs安装说明和必须安装的软件

    Piwigo是一款免费开源使用的多功能图库软件,该软件基于最新的MySQL5与PHP5编程语言开发,性能强大,为用户提供..._data\i\galleries\视频目录\pwg_representative 删除这个目录下xxxx-cu_e250.jpg文件,然后刷新下前台

    canner 日历数据插件

    time = new Date().Format("yyyyMM"); } var calendar = $("#eleCalendar").calendar({ month : time, animate : false }); // 日历数据 var calendar_data = { }; var status = { "1" : { class : ...

    深入理解angularjs过滤器

    •在html文件中和在js文件中使用 $scope.form_time = $filter('date')($scope.time, 'yyyy-MM-dd HH:mm:ss'); &lt;p&gt;{{time | date: 'yyyy-MM-dd HH:mm:ss'}} •内部过滤器和自定义过滤器 .filter('my_data_format'...

    gee:2015年IBM Power Contest的代码

    gee##About back-end APIRESTful APIHTTP methods: GET, POSTData exchange format: JSONTime format: ... /api/gee/videohosts/date:20151010返回列表中的对象{ "id": "c0a831201510100910540055700", "format": "m

Global site tag (gtag.js) - Google Analytics