`

js中Date对象的format操作类,名为DateFormat,很好用

    博客分类:
  • js
阅读更多
  1. <pre class="javascript" name="code">/**  
  2.  * 此JS文件是格式化JS中日期时间的工具类,其中包含了传入日期对象Date,格式化成想要的格式,<br>  
  3.  * 或者传入字符串格式的时间个,次字符串日期对应的格式可以转换为相应的日期对象,<br>  
  4.  * 可以计算两个日期之间的差值  
  5.  *   
  6.  * y: 表示年  
  7.  * M:表示一年中的月份 1~12  
  8.  * d: 表示月份中的天数 1~31  
  9.  * H:表示一天中的小时数 00~23  
  10.  * m: 表示小时中的分钟数 00~59  
  11.  * s: 表示分钟中的秒数   00~59  
  12.  */    
  13.       
  14.   var DateFormat = function(bDebug){    
  15.       this.isDebug = bDebug || false;    
  16.       this.curDate = new Date();    
  17.   }    
  18.      
  19.  DateFormat.prototype = {    
  20.     //定义一些常用的日期格式的常量     
  21.     DEFAULT_DATE_FORMAT: 'yyyy-MM-dd',    
  22.     DEFAULT_MONTH_FORMAT: 'yyyy-MM',    
  23.     DEFAULT_YEAR_FORMAT: 'yyyy',    
  24.     DEFAULT_TIME_FORMAT: 'HH:mm:ss',    
  25.     DEFAULT_DATETIME_FORMAT: 'yyyy-MM-dd HH:mm:ss',    
  26.     DEFAULT_YEAR: 'YEAR',    
  27.     DEFAULT_MONTH: 'MONTH',    
  28.     DEFAULT_DATE: 'DATE',    
  29.     DEFAULT_HOUR: 'HOUR',    
  30.     DEFAULT_MINUTE: 'MINUTE',    
  31.     DEFAULT_SECOND: 'SECOND',    
  32.         
  33.     /**  
  34.      * 根据给定的日期时间格式,格式化当前日期  
  35.      * @params strFormat 格式化字符串, 如:"yyyy-MM-dd" 默认格式为:“yyyy-MM-dd HH:mm:ss”  
  36.      * @return 返回根据给定格式的字符串表示的时间日期格式<br>  
  37.      *         如果传入不合法的格式,则返回日期的字符串格式{@see Date#toLocaleString()}  
  38.      */    
  39.      formatCurrentDate: function(strFormat){    
  40.        try{    
  41.           var tempFormat = strFormat == undefined? this.DEFAULT_DATETIME_FORMAT: strFormat;    
  42.           var dates = this.getDateObject(this.curDate);    
  43.           if(/(y+)/.test(tempFormat)){    
  44.              var fullYear = this.curDate.getFullYear() + '';    
  45.              var year = RegExp.$1.length == 4? fullYear: fullYear.substr(4 - RegExp.$1.length);    
  46.              tempFormat = tempFormat.replace(RegExp.$1, year);    
  47.           }    
  48.           for(var i in dates){    
  49.              if(new RegExp('(' + i + ')').test(tempFormat)){    
  50.                 var target = RegExp.$1.length == 1? dates[i]: ('0' + dates[i]).substr(('' + dates[i]).length - 1);    
  51.                 tempFormat = tempFormat.replace(RegExp.$1, target);    
  52.              }    
  53.           }    
  54.           return tempFormat === strFormat? this.curDate.toLocaleString(): tempFormat;    
  55.        }catch(e){    
  56.           this.debug('格式化日期出现异常:' + e.message);    
  57.        }    
  58.     },    
  59.         
  60.         
  61.     /**  
  62.      * 根据给定的格式,把给定的时间进行格式化  
  63.      * @params date 要格式化的日期  
  64.      * @params strFormat 要得到的日期的格式的格式化字符串,如:'yyyy-MM-dd',默认:yyyy-MM-dd HH:mm:ss  
  65.      * @return 根据规定格式的时间格式  
  66.      *    
  67.      * @updateDate 2011-09-15  
  68.      */    
  69.     format: function(date, strFormat){    
  70.      try{    
  71.         if(date == undefined){    
  72.            this.curDate = new Date();    
  73.         }else if(!(date instanceof Date)){    
  74.            this.debug('你输入的date:' + date + '不是日期类型');    
  75.            return date;    
  76.         }else{    
  77.            this.curDate = date;    
  78.         }    
  79.         return this.formatCurrentDate(strFormat);    
  80.      }catch(e){    
  81.         this.debug('格式化日期出现异常:' + e.message);    
  82.      }    
  83.     },    
  84.         
  85.     /**  
  86.      * 根据给定的格式对给定的字符串日期时间进行解析,  
  87.      * @params strDate 要解析的日期的字符串表示,此参数只能是字符串形式的日期,否则返回当期系统日期  
  88.      * @params strFormat 解析给定日期的顺序, 如果输入的strDate的格式为{Date.parse()}方法支持的格式,<br>  
  89.      *         则可以不传入,否则一定要传入与strDate对应的格式, 若不传入格式则返回当期系统日期。  
  90.      * @return 返回解析后的Date类型的时间<br>  
  91.      *        若不能解析则返回当前日期<br>  
  92.      *        若给定为时间格式 则返回的日期为 1970年1月1日的日期  
  93.      *  
  94.      * bug: 此方法目前只能实现类似'yyyy-MM-dd'格式的日期的转换,<br>  
  95.      *       而'yyyyMMdd'形式的日期,则不能实现  
  96.      */    
  97.          
  98.     parseDate: function(strDate, strFormat){    
  99.        if(typeof strDate != 'string'){    
  100.             return new Date();    
  101.        }    
  102.       var longTime = Date.parse(strDate);    
  103.       if(isNaN(longTime)){    
  104.           if(strFormat == undefined){    
  105.               this.debug('请输入日期的格式');    
  106.              return new Date();    
  107.           }    
  108.           var tmpDate = new Date();    
  109.           var regFormat = /(\w{4})|(\w{2})|(\w{1})/g;    
  110.           var regDate = /(\d{4})|(\d{2})|(\d{1})/g;    
  111.           var formats = strFormat.match(regFormat);    
  112.           var dates = strDate.match(regDate);    
  113.           if( formats != undefined &&  dates != undefined && formats.length == dates.length){    
  114.             for(var i = 0; i < formats.length; i++){    
  115.               var format = formats[i];    
  116.               if(format === 'yyyy'){    
  117.                 tmpDate.setFullYear(parseInt(dates[i], 10));    
  118.               }else if(format == 'yy'){    
  119.                 var prefix = (tmpDate.getFullYear() + '').substring(0, 2);    
  120.                 var year = (parseInt(dates[i], 10) + '').length == 4? parseInt(dates[i], 10): prefix + (parseInt(dates[i], 10) + '00').substring(0, 2);    
  121.                 var tmpYear = parseInt(year, 10);    
  122.                 tmpDate.setFullYear(tmpYear);    
  123.               }else if(format == 'MM' || format == 'M'){    
  124.                 tmpDate.setMonth(parseInt(dates[i], 10) - 1);    
  125.               }else if(format == 'dd' || format == 'd'){    
  126.                 tmpDate.setDate(parseInt(dates[i], 10));    
  127.               }else if(format == 'HH' || format == 'H'){    
  128.                 tmpDate.setHours(parseInt(dates[i], 10));    
  129.               }else if(format == 'mm' || format == 'm'){    
  130.                 tmpDate.setMinutes(parseInt(dates[i], 10));    
  131.               }else if(format == 'ss' || format == 's'){    
  132.                 tmpDate.setSeconds(parseInt(dates[i], 10));    
  133.               }    
  134.             }    
  135.            return tmpDate;    
  136.          }    
  137.           return tmpDate;    
  138.         }else{    
  139.           return new Date(longTime);    
  140.         }    
  141.     },    
  142.         
  143.         
  144.     /**  
  145.      * 根据给定的时间间隔类型及间隔值,以给定的格式对给定的时间进行计算并格式化返回  
  146.      * @params date 要操作的日期时间可以为时间的字符串或者{@see Date}类似的时间对象,  
  147.      * @params interval 时间间隔类型如:"YEAR"、"MONTH"、 "DATE", 不区分大小写  
  148.      * @params amount 时间间隔值,可以正数和负数, 负数为在date的日期减去相应的数值,正数为在date的日期上加上相应的数值  
  149.      * @params strFormat 当输入端的date的格式为字符串是,此项必须输入。若date参数为{@see Date}类型是此项会作为最终输出的格式。  
  150.      * @params targetFormat 最终输出的日期时间的格式,若没有输入则使用strFormat或者默认格式'yyyy-MM-dd HH:mm:ss'  
  151.      * @return 返回计算并格式化后的时间的字符串  
  152.      */    
  153.     changeDate: function(date, interval, amount, strFormat, targetFormat){    
  154.         var tmpdate = new Date();    
  155.         if(date == undefined){    
  156.            this.debug('输入的时间不能为空!');    
  157.            return new Date();    
  158.         }else if(typeof date == 'string'){    
  159.             tmpdate = this.parseDate(date, strFormat);    
  160.         }else if(date instanceof Date){    
  161.           tmpdate = date;    
  162.         }    
  163.         var field  =  (typeof interval == 'string')? interval.toUpperCase(): 'DATE';    
  164.             
  165.         try{    
  166.           amount = parseInt(amount + '', 10);    
  167.           if(isNaN(amount)){    
  168.              amount = 0;    
  169.           }    
  170.         }catch(e){    
  171.            this.debug('你输入的[amount=' + amount + ']不能转换为整数');    
  172.            amount = 0;    
  173.         }    
  174.         switch(field){    
  175.            case this.DEFAULT_YEAR:    
  176.              tmpdate.setFullYear(tmpdate.getFullYear() + amount);    
  177.              break;    
  178.            case this.DEFAULT_MONTH:    
  179.              tmpdate.setMonth(tmpdate.getMonth() + amount);    
  180.              break;    
  181.            case this.DEFAULT_DATE:    
  182.              tmpdate.setDate(tmpdate.getDate() + amount);    
  183.              break;    
  184.            case this.DEFAULT_HOUR:    
  185.              tmpdate.setHours(tmpdate.getHours() + amount);    
  186.              break;    
  187.            case this.DEFAULT_MINUTE:    
  188.              tmpdate.setMinutes(tmpdate.getMinutes() + amount);    
  189.              break;    
  190.            case this.DEFAULT_SECOND:    
  191.               tmpdate.setSeconds(tmpdate.getSeconds() + amount);    
  192.              break;    
  193.            default:    
  194.               this.debug('你输入的[interval:' + field + '] 不符合条件!');            
  195.         }    
  196.             
  197.         this.curDate = tmpdate;    
  198.         return this.formatCurrentDate(targetFormat == undefined? strFormat: targetFormat);    
  199.     },    
  200.         
  201.     /**  
  202.      * 比较两个日期的差距  
  203.      * @param date1 Date类型的时间  
  204.      * @param date2 Dete 类型的时间  
  205.      * @param isFormat boolean 是否对得出的时间进行格式化,<br>   
  206.      *       false:返回毫秒数,true:返回格式化后的数据  
  207.      * @return 返回两个日期之间的毫秒数 或者是格式化后的结果  
  208.      */    
  209.     compareTo: function(date1, date2, isFormat){    
  210.       try{    
  211.             var len = arguments.length;    
  212.             var tmpdate1 = new Date();    
  213.             var tmpdate2 = new Date();    
  214.             if(len == 1){    
  215.                tmpdate1 = date1;    
  216.             }else if(len >= 2){    
  217.               tmpdate1 = date1;    
  218.               tmpdate2 = date2;    
  219.             }    
  220.         if(!(tmpdate1 instanceof Date) || !(tmpdate2 instanceof Date)){    
  221.            return 0;    
  222.         }else{    
  223.             var time1 = tmpdate1.getTime();     
  224.             var time2 = tmpdate2.getTime();    
  225.             var time = Math.max(time1, time2) - Math.min(time1, time2);    
  226.             if(!isNaN(time) && time > 0){    
  227.                if(isFormat){    
  228.                   var date = new Date(time);    
  229.                   var result = {};    
  230.                   result['year']   = (date.getFullYear() - 1970) > 0? (date.getFullYear() - 1970): '0';    
  231.                   result['month']  = (date.getMonth() - 1) > 0? (date.getMonth() - 1): '0';    
  232.                   result['day']    = (date.getDate() - 1) > 0? (date.getDate() - 1): '0';    
  233.                   result['hour']   = (date.getHours() - 8) > 0? (date.getHours() - 1): '0';    
  234.                   result['minute'] = date.getMinutes() > 0? date.getMinutes(): '0';    
  235.                   result['second'] = date.getSeconds() > 0? date.getSeconds(): '0';    
  236.                   return result;    
  237.                 }else {    
  238.                  return time;    
  239.                 }    
  240.             }else{    
  241.               return 0;    
  242.             }    
  243.         }    
  244.       }catch(e){    
  245.         this.debug('比较时间出现异常' + e.message);    
  246.       }    
  247.     },    
  248.         
  249.     /**  
  250.      * 根据给定的日期得到日期的月,日,时,分和秒的对象  
  251.      * @params date 给定的日期 date为非Date类型, 则获取当前日期  
  252.      * @return 有给定日期的月、日、时、分和秒组成的对象  
  253.      */    
  254.     getDateObject: function(date){    
  255.          if(!(date instanceof Date)){    
  256.            date = new Date();    
  257.          }    
  258.         return {    
  259.             'M+' : date.getMonth() + 1,     
  260.             'd+' : date.getDate(),       
  261.             'H+' : date.getHours(),       
  262.             'm+' : date.getMinutes(),     
  263.             's+' : date.getSeconds()    
  264.          };    
  265.     },    
  266.         
  267.     /**  
  268.      *在控制台输出日志  
  269.      *@params message 要输出的日志信息  
  270.      */    
  271.     debug: function(message){    
  272.        try{    
  273.            if(!this.isDebug){    
  274.              return;    
  275.            }    
  276.            if(!window.console){    
  277.                window.console = {};    
  278.                window.console.log = function(){    
  279.                   return;    
  280.                }    
  281.            }    
  282.            window.console.log(message + ' ');    
  283.        }catch(e){    
  284.        }    
  285.     }    
  286. }    
  287. </pre><br>  
  288. <pre></pre>
分享到:
评论

相关推荐

    java操作date对象

    使用 `DateFormat` 类可以将日期和时间对象转换为字符串,以便以特定的格式显示。以下是一些常见的日期格式化示例: - `DateFormat.getDateInstance()`:默认的日期格式(例如:2009-02-28) - `DateFormat....

    JavaScript DateFormat

    为了使用这个工具,首先需要引入`DateUtil.js`到你的JavaScript代码中,然后创建一个`Date`对象或者使用现有的`Date`对象,接着调用`format()`方法,传入日期对象和所需的格式字符串。 ```javascript // 引入...

    JAVA System、Math、Date、DateFormat、Calendar

    例如,`DateFormat.format(date)`将日期对象转换为字符串,而`DateFormat.parse(string)`则将字符串转换为日期对象。 最后,`Calendar`类是`Date`的一个增强版本,提供了更灵活的日期和时间操作。它支持日历字段,...

    js dateformat yyyy-MM-dd形式

    在JavaScript中,日期和时间处理是一项常见的任务,`Date`对象是JavaScript内置的处理日期和时间的类。当我们需要将日期格式化为"yyyy-MM-dd"这种格式时,JavaScript提供了多种方法来实现这一需求。这个格式通常用于...

    欧柏泰克:Java常用类库--日期操作类

    在 Java 语言中,日期操作类是非常重要的一部分,常用的日期操作类有 Date 类、Calendar 类和 DateFormat 类。下面是对这三个类的详细介绍: Date 类 Date 类是 Java 语言中最基本的日期操作类,位于 java.util ...

    第6天(常用API【Date、DateFormat、Calendar、Math、System、包装类、正则表达式】)v20170

    【Java常用API】深入解析 在Java编程中,掌握常用...通过以上讲解,我们可以更好地理解和使用Java中的日期处理、字符串转换、数学计算以及正则表达式验证。掌握这些常用API将有助于提升编程能力,让代码更加简洁高效。

    java使用DateFormat类转换时间格式.docx

    ### Java使用DateFormat类转换时间格式 #### 一、引言 在Java编程中,处理日期与时间是非常常见的需求之一。`java.util`包中的`DateFormat`类提供了多种方法来格式化日期并将其转换为字符串,或者将字符串解析为...

    Date、String、Timestamp之间的转换

    在上面的代码中,我们使用 getDateInstance 方法获取不同的日期格式,例如 SHORT、MEDIUM、FULL,然后使用 format 方法将 Date 转换为 String。 Date、String、Timestamp 之间的转换是 Java 开发中一个非常重要的...

    java中时间类Date和Calendar的使用

    总结来说,Java中的`Date`和`Calendar`类提供了基本的时间处理功能,`DateFormat`和`SimpleDateFormat`则负责日期和时间的格式化,使我们能够根据需要将日期和时间转换为人类可读的字符串。在实际开发中,这些类经常...

    16_常用API_第2天(正则表达式、Date、DateFormat、Calendar)_讲义

    例如,我们可以创建一个`SimpleDateFormat`实例,设置"yyyy-MM-dd HH:mm:ss"的格式,然后使用`parse()`方法解析日期字符串,或者用`format()`方法将日期对象转换为字符串。 在更复杂的时间操作中,`Calendar`类扮演...

    String和Date的转换

    然后,用这些格式化器的`format()`方法将`Date`对象转换为相应的字符串。 除了`SimpleDateFormat`和`DateFormat`,还有`DateTimeFormatter`(Java 8及更高版本)可以用来进行更灵活的日期和时间格式化。`...

    Java基础之Date和Calendar类的使用方法

    Java中的Date和Calendar类是处理日期和时间的核心组件。Date类主要用于表示特定的瞬间,精确到毫秒。在早期版本的Java中,Date类的设计受到批评,因为它的API不直观且容易导致错误。为了解决这些问题,大部分日期和...

    解析Date & Calendar类

    使用`java.text.SimpleDateFormat`类,可以将Date对象格式化为指定格式的字符串。例如,将日期加一天后,可以使用`SimpleDateFormat("yyyy-MM-dd")`格式化日期和时间。 - **JSP页面中的日期格式化**: 在JSP中,...

    Java Date的使用

    根据提供的文件信息,我们可以总结出以下关于Java中Date类及其时间格式化的相关知识点: ### Java Date 类概述 在Java中,`java.util.Date`类表示特定的瞬间,精确到毫秒。该类提供了多种构造方法来创建日期实例,...

    String与date的转换

    例如,在处理用户输入的数据、解析文本文件或与数据库交互时,通常需要将字符串转换为日期对象进行进一步的操作,如日期计算、排序等;相反地,也需要将日期对象格式化为特定格式的字符串以便于展示给用户或存储到...

    DateFormat_Dateformat_

    标题中的"DateFormat_Dateformat_"可能是指在编程中处理日期格式化时使用特定的分隔符“-”来组织日期字符串。在很多编程语言中,日期和时间的格式化是通过特定的方法或函数来完成的,这通常涉及到指定日期的各个...

    JAVA中获取当前时间

    通过以上介绍,我们可以看到,在Java中获取当前时间有多种方法,其中使用`java.util.Date`类和`java.text.DateFormat`类是一种较为传统但非常实用的方式。这些方法不仅能够满足大多数情况下对时间和日期的格式化需求...

    Java date format时间格式化操作示例

    Java date format时间格式化操作示例 Java Date Format 是 Java 语言中用于格式化日期和时间的类库。DateFormat 类是 Java 的一个抽象类,它提供了将日期和时间转换为字符串的方法。通过使用 DateFormat,可以将...

Global site tag (gtag.js) - Google Analytics