`
Relucent
  • 浏览: 209313 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript日期格式化

    博客分类:
  • JS
阅读更多
DateFormat = (function(){   
 var SIGN_REGEXP = /([yMdhsm])(\1*)/g;   
 var DEFAULT_PATTERN = 'yyyy-MM-dd';   
 function padding(s,len){   
  var len =len - (s+'').length;   
  for(var i=0;i<len;i++){s = '0'+ s;}   
  return s;   
 };
 return({   
  format: function(date,pattern){   
   pattern = pattern||DEFAULT_PATTERN;   
   return pattern.replace(SIGN_REGEXP,function($0){   
    switch($0.charAt(0)){   
     case 'y' : return padding(date.getFullYear(),$0.length);   
     case 'M' : return padding(date.getMonth()+1,$0.length);   
     case 'd' : return padding(date.getDate(),$0.length);   
     case 'w' : return date.getDay()+1;   
     case 'h' : return padding(date.getHours(),$0.length);   
     case 'm' : return padding(date.getMinutes(),$0.length);   
     case 's' : return padding(date.getSeconds(),$0.length);   
    }   
   });   
  },   
  parse: function(dateString,pattern){   
   var matchs1=pattern.match(SIGN_REGEXP);   
   var matchs2=dateString.match(/(\d)+/g);   
   if(matchs1.length==matchs2.length){   
    var _date = new Date(1970,0,1);   
    for(var i=0;i<matchs1.length;i++){
     var _int = parseInt(matchs2[i]);
     var sign = matchs1[i];
    switch(sign.charAt(0)){   
     case 'y' : _date.setFullYear(_int);break;   
     case 'M' : _date.setMonth(_int-1);break;   
     case 'd' : _date.setDate(_int);break;   
     case 'h' : _date.setHours(_int);break;   
     case 'm' : _date.setMinutes(_int);break;   
     case 's' : _date.setSeconds(_int);break;   
    }
    }   
    return _date;   
   }   
   return null;   
  }   
 });   
})();   

 //将一个 Date 格式化为日期/时间字符串。
 alert(  DateFormat.format(new Date(),'yyyy年MM月dd日')  );
 //从给定字符串的开始分析文本,以生成一个日期。
 alert(  DateFormat.parse('2010-03-17','yyyy-MM-dd')  );

 

 

 

备注:parse方法处理的有点不好,还有点问题。 类似yyyyMMdd之类没有分割的格式无法解析。

 

分享到:
评论
13 楼 tom&jerry 2010-08-03  
jindw 写道



个人认为两段代码的复杂度是一样的,而且楼主的代码更漂亮.
12 楼 hemuxiao 2010-04-07  
为什么要写这么复杂呢?
11 楼 提烟而过 2010-03-23  
为什么不用正则表达式,而要写这么复杂呢?
10 楼 Relucent 2010-03-23  
其实是写复杂了jindw 的那个写的不错。

大家可以去看看。
9 楼 lucky16 2010-03-22  
感觉代码确实多了这么一点点!
8 楼 xiao-qiang163 2010-03-22  
写得还可以,好不好是另外一说嘛,首先要鼓励同时也感谢兄弟和大家一起分享你的成功!
7 楼 闫昌盛 2010-03-21  
<div class="quote_title">Relucent 写道</div>
<div class="quote_div">
<pre name="code" class="js">DateFormat = {
 format : function(date,formatter){
  if(date==null){return null;};
  if(formatter==null){formatter = "yyyy-MM-dd";};
  var year = date.getYear().toString();
  var month = (date.getMonth() + 1).toString();
  var day = date.getDate().toString();
  var hours = date.getHours().toString();
  var minutes = date.getMinutes().toString();
  var seconds = date.getSeconds().toString();
  var yearMarker = formatter.replace(/[^y]/g,'');
  var monthMarker = formatter.replace(/[^M]/g,'');
  var dayMarker = formatter.replace(/[^d]/g,'');
  var hoursMarker = formatter.replace(/[^h]/g,'');
  var minutesMarker = formatter.replace(/[^m]/g,'');
  var secondsMarker = formatter.replace(/[^s]/g,'');
  if(yearMarker.length == 2){year = year.substring(2,4);};
  if(monthMarker.length &gt; 1 &amp;&amp; month.length==1){month = "0" + month;};
  if(dayMarker.length &gt; 1 &amp;&amp; day.length==1){day = "0" + day;};
  if(hoursMarker.length &gt; 1 &amp;&amp; hours.length==1){hours = "0" + hours;};
  if(minutesMarker.length &gt; 1 &amp;&amp; minutes.length==1){minutes = "0" + minutes;};
  if(secondsMarker.length &gt; 1 &amp;&amp; seconds.length==1){seconds = "0" + seconds;};
  if(yearMarker.length&gt;0){formatter = formatter.replace(yearMarker,year);}
  if(monthMarker.length&gt;0){formatter = formatter.replace(monthMarker,month);};
  if(dayMarker.length&gt;0){formatter = formatter.replace(dayMarker,day);};
  if(hoursMarker.length&gt;0){formatter = formatter.replace(hoursMarker,hours);};
  if(minutesMarker.length&gt;0){formatter = formatter.replace(minutesMarker,minutes);};   
  if(secondsMarker.length&gt;0){formatter = formatter.replace(secondsMarker,seconds);};
  return formatter;
 },
 parse : function(dateString,formatter){
  var today = new Date();
  if(dateString==null){return today;};
  if(formatter==null){formatter = "yyyy-MM-dd";};
  var yearMarker = formatter.replace(/[^y]/g,'');
  var monthMarker = formatter.replace(/[^M]/g,'');
  var dayMarker = formatter.replace(/[^d]/g,'');
  var hoursMarker = formatter.replace(/[^h]/g,'');
  var minutesMarker = formatter.replace(/[^m]/g,'');
  var secondsMarker = formatter.replace(/[^s]/g,'');
  var yearPosition = formatter.indexOf(yearMarker);
  var yearLength = yearMarker.length;
  var year = parseInt( dateString.substring(yearPosition ,yearPosition + yearLength) );
  if(isNaN(year)){
   year = today.getYear();
  }else{
   if( yearLength == 2){
    if(year &lt; 50 ){
     year += 2000;
    }else{
     year += 1900;
    };
   };
  };
  var monthPosition = formatter.indexOf(monthMarker);
  var month = parseInt( dateString.substring(monthPosition,monthPosition + monthMarker.length) );
  if(isNaN(month)){
   month = today.getMonth();
  }else{
   month-=1
  };
  var dayPosition = formatter.indexOf(dayMarker);
  var day = parseInt( dateString.substring( dayPosition,dayPosition + dayMarker.length ) );
  if(isNaN(day)){
   day = today.getDate();
  }else{
  };
  var hoursPosition = formatter.indexOf(hoursMarker);
  var hours = parseInt( dateString.substring( hoursPosition,hoursPosition + hoursMarker.length ) );
  if(isNaN(hours)){
   hours = 0;
  };
  var minutesPosition = formatter.indexOf(minutesMarker);
  var minutes = parseInt( dateString.substring( minutesPosition,minutesPosition + minutesMarker.length ) );
  if(isNaN(minutes)){
   minutes = 0;
  };
  var secondsPosition = formatter.indexOf(secondsMarker);
  var seconds = parseInt( dateString.substring( secondsPosition,secondsPosition + secondsMarker.length ) );
  if(isNaN(seconds)){
   seconds = 0;
  };
  return new Date(year,month,day, hours,minutes,seconds);
 }
};</pre>
<p> </p>
<p> //将一个 Date 格式化为日期/时间字符串。<br> alert(  DateFormat.format(new Date(),'yyyy年MM月dd日')  );<br> //从给定字符串的开始分析文本,以生成一个日期。<br> alert(  DateFormat.parse('20100317','yyyyMMdd')  );</p>
<p> </p>
<p> </p>
</div>
<p> </p>
6 楼 upup1000 2010-03-19  
d: "String.leftPad(this.getDate(), 2, '0')",
        D: "Date.getShortDayName(this.getDay())", // get localised short day name
        j: "this.getDate()",
        l: "Date.dayNames[this.getDay()]",
        N: "(this.getDay() ? this.getDay() : 7)",
        S: "this.getSuffix()",
        w: "this.getDay()",
        z: "this.getDayOfYear()",
        W: "String.leftPad(this.getWeekOfYear(), 2, '0')",
        F: "Date.monthNames[this.getMonth()]",
        m: "String.leftPad(this.getMonth() + 1, 2, '0')",
        M: "Date.getShortMonthName(this.getMonth())", // get localised short month name
        n: "(this.getMonth() + 1)",
        t: "this.getDaysInMonth()",
        L: "(this.isLeapYear() ? 1 : 0)",
        o: "(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",
        Y: "this.getFullYear()",
        y: "('' + this.getFullYear()).substring(2, 4)",
        a: "(this.getHours() < 12 ? 'am' : 'pm')",
        A: "(this.getHours() < 12 ? 'AM' : 'PM')",
        g: "((this.getHours() % 12) ? this.getHours() % 12 : 12)",
        G: "this.getHours()",
        h: "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",
        H: "String.leftPad(this.getHours(), 2, '0')",
        i: "String.leftPad(this.getMinutes(), 2, '0')",
        s: "String.leftPad(this.getSeconds(), 2, '0')",
        u: "String.leftPad(this.getMilliseconds(), 3, '0')",
        O: "this.getGMTOffset()",
        P: "this.getGMTOffset(true)",
        T: "this.getTimezone()",
        Z: "(this.getTimezoneOffset() * -60)",
5 楼 mawt 2010-03-19  
Date.prototype.format = function(style){
    var o = {
        "M+": this.getMonth() + 1, //month
        "d+": this.getDate(), //day
        "h+": this.getHours(), //hour
        "m+": this.getMinutes(), //minute
        "s+": this.getSeconds(), //second
        "w+": "天一二三四五六".charAt(this.getDay()), //week
        "q+": Math.floor((this.getMonth() + 3) / 3), //quarter
        "S": this.getMilliseconds() //millisecond
    }
    if (/(y+)/.test(style)) {
        style = style.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(style)) {
            style = style.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
        }
    }
    return style;
};

这个是不是好点呢
4 楼 jindw 2010-03-19  
3 楼 sodabao 2010-03-19  
这的没有必要这样写 太麻烦了
2 楼 風一樣的男子 2010-03-19  
这代码太复杂了
1 楼 ljt122000 2010-03-18  
头都晕了,就为了个格式化就这么麻烦......

相关推荐

    javascript日期格式化

    在JavaScript中,我们可以使用内置的`Date`对象来创建、操作和格式化日期。 首先,`Date`对象是JavaScript中的内置构造函数,可以用来创建一个新的日期实例。例如: ```javascript let date = new Date(); // 创建...

    全面兼容的javascript时间格式化函数(比较实用)

    在探讨JavaScript时间格式化函数之前,了解一些关于JavaScript中的时间对象是很有必要的。JavaScript中的Date对象用于处理日期和时间。Date对象支持多种方法,例如获取年、月、日、小时、分钟和秒等。不同的浏览器和...

    JavaScript时间格式化插件,返回指定字符串

    JavaScript时间格式化插件是一种工具,它允许开发者以自定义的格式显示日期和时间,使得在Web应用中处理和展示时间信息更为灵活和方便。在JavaScript中,原生的Date对象虽然提供了基本的时间处理功能,但其输出格式...

    javascript日期格式化方法汇总

    在前端开发工作中,日期时间格式化是一个频繁遇到的需求。本文总结了JavaScript中处理日期时间格式化的几种常用方法,尤其是推荐了一种个性化的输出方式,该方法提供了灵活性和丰富的日期时间表现形式,能够满足多种...

    JavaScript 格式化时间日期

    在JavaScript中,处理和...这篇博文的链接(https://w8700569.iteye.com/blog/882708)可能包含了更多示例和深入的讨论,对于学习和实践JavaScript日期格式化非常有帮助。阅读完整的文章将有助于掌握更多细节和技巧。

    JavaScript - 格式化日期时间.zip

    此外,除了手动格式化,还可以使用一些库,如Moment.js或date-fns,它们提供了更丰富的日期时间处理功能和易用的API,可以轻松实现各种复杂的日期时间格式化需求。不过,对于基础的格式化需求,了解和掌握JavaScript...

    javascript 日期数字文本格式化

    在JavaScript中,日期和数字的文本格式化是一个常见的需求,特别是在构建用户界面或者处理数据时。这个主题主要涉及如何将日期对象转换为易读的字符串,以及如何对数字进行格式化,使其符合特定的显示标准。这篇博文...

    javascript中Date format(js日期格式化)方法小结.docx

    通过不同的格式字符串,可以轻松地获取到所需的日期时间格式。此外,第二种方法还提供了更丰富的格式选项,如星期的显示,适用于需要更复杂日期格式化需求的应用场景。 ### 使用建议 虽然上述两种方法非常实用,但...

    javascript的trim和日期时间格式化函数

    ### JavaScript中的Trim函数和日期时间格式化函数 在JavaScript中,字符串处理和日期操作是非常常见的需求,尤其是在数据清洗、格式转换等场景下。本文将详细介绍如何利用自定义方法实现字符串的Trim功能以及日期...

    JavaScript日期和时间格式化全指南

    JavaScript提供了多种方式来格式化日期和时间,包括原生的Date对象方法、国际化API(Intl对象)以及第三方库。本文将详细介绍这些方法,并提供实际代码示例。 在JavaScript中格式化日期和时间是一个涉及多种方法和...

    详解JavaScript时间格式化

    感谢某前辈写的JS格式化日期和时间JS代码,很好很强大!!! 前言:  js虽然提供了各种获取时间Date对象的不同属性方法,如:getDate 方法 | getDay 方法 | getFullYear 方法 | getHours 方法 … … 等等,但是却...

    js 日期 format 格式化

    在Web应用中,日期时间格式化的灵活性对于提高用户体验至关重要,因此掌握这一技能非常实用。 #### 描述:对前端日期进行格式化 这段描述提供了关于日期格式化功能的具体用法示例,展示了如何使用自定义格式字符串...

    javascript精确计算日期处理金额格式化

    这些库提供了更强大的功能,如时区支持、复杂的日期格式化、日期时间的加减操作、日期比较等。例如,Moment.js允许你用`moment().format('YYYY-MM-DD')`来轻松地格式化日期,而date-fns则推崇更简洁的API设计,如`...

    javascript日期格式化示例分享

    标题“javascript日期格式化示例分享”和描述“主要介绍了javascript日期格式化示例,需要的朋友可以参考下”共同指向一个主题:即在JavaScript中如何对日期进行格式化。在编程实践中,日期格式化是一个常见需求,...

    js通用日期格式化工具 date.js

    js通用日期格式化工具,直接引用该工具类就可以使用,方便快捷,建议大家收藏此工具类,该工具很好的解决了前端页面显示日期格式问题

    css html javascript 代码格式化源码

    5. **JavaScript代码格式化**: JavaScript是网页动态功能的核心,其代码格式化同样重要。工具如Prettier或ESLint可以帮助开发者统一代码风格,提高代码质量。这些工具可以处理括号对齐、变量命名规则、导入顺序等...

    JavaScript仿PHP时间格式化函数

    总的来说,这个"JavaScript仿PHP时间格式化函数"极大地扩展了JavaScript在日期格式化方面的灵活性,使得前端开发者无需后端的帮助,也能实现与PHP类似的日期处理。这个库对于需要在多种语言间保持一致日期格式的项目...

    Javascript日期格式化format函数的使用方法

    Javascript日期格式化在日常开发中还是挺常见的,那么下面就给大家分享Javascript时间格式format函数的两种使用方法示例,一起来看看。 方法一 Date.prototype.pattern=function(fmt) { var o = { "M+" : this....

    js 格式化日期 JavaScript格式化日期类型

    js 语言的格式化日期格式的类。很好用的。

    javascript 格式化时间日期函数代码脚本之家修正版

    在JavaScript开发中,日期和时间的处理是非常常见的需求之一。...最终,通过这种方式,我们可以实现一个通用的JavaScript日期时间格式化工具,使得日期时间的显示更加符合中文用户的阅读习惯,提高了用户体验。

Global site tag (gtag.js) - Google Analytics