熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Javascript日期格式化函數性能對比

2013-11-15 12:05:00  來源: JSP教程 

  最近開發的軟件中需要用到日志功能其中有一個重要功能是顯示日期和時間於是網上搜了一把搜到大量的日期格式化函數不過比較了下感覺代碼都不夠優雅而且性能都不給力

  對線上一些代碼進行了評測結果如下

  測試代碼如下分別對格式化函數進行萬次計算

代碼如下  

  var start = new Date()getTime();

  var date = new Date();

  for(var i = ;i<;i++){

  dateformat(yyyyMMdd hh:mm:ss);

  }

  consolelog(new Date()getTime() start);

  函數

代碼如下  

  // 對Date的擴展將 Date 轉化為指定格式的String

  // 月(M)日(d)小時(h)分(m)秒(s)季度(q) 可以用 個占位符

  // 年(y)可以用 個占位符毫秒(S)只能用 個占位符(是 位的數字)

  // 例子

  // (new Date())Format("yyyyMMdd hh:mm:ssS") ==> ::

  // (new Date())Format("yyyyMd h:m:sS") ==> ::

  Dateprototypeformat = function (fmt) { //author: meizz

  var o = {

  "M+": thisgetMonth() + //月份

  "d+": thisgetDate() //日

  "h+": thisgetHours() //小時

  "m+": thisgetMinutes() //分

  "s+": thisgetSeconds() //秒

  "q+": Mathfloor((thisgetMonth() + ) / ) //季度

  "S": thisgetMilliseconds() //毫秒

  };

  if (/(y+)/test(fmt)) fmt = fmtreplace(RegExp$ (thisgetFullYear() + "")substr( RegExp$length));

  for (var k in o)

  if (new RegExp("(" + k + ")")test(fmt)) fmt = fmtreplace(RegExp$ (RegExp$length == ) ? (o[k]) : (("" + o[k])substr(("" + o[k])length)));

  return fmt;

  }

  

  測試三次

  成績毫秒

  成績毫秒

  成績毫秒

  平均毫秒

  函數

代碼如下  

  /** * 對Date的擴展將 Date 轉化為指定格式的String * 月(M)日(d)小時(h)小時(H)分(m)秒(s)周(E)季度(q)

  可以用 個占位符 * 年(y)可以用 個占位符毫秒(S)只能用 個占位符(是 位的數字) * eg: * (new

  Date())pattern("yyyyMMdd hh:mm:ssS")==> ::

  * (new Date())pattern("yyyyMMdd E HH:mm:ss") ==> ::

  * (new Date())pattern("yyyyMMdd EE hh:mm:ss") ==> 周二 ::

  * (new Date())pattern("yyyyMMdd EEE hh:mm:ss") ==> 星期二 ::

  * (new Date())pattern("yyyyMd h:m:sS") ==> ::

  */

  Dateprototypeformat=function(fmt) {

  var o = {

  "M+" : thisgetMonth()+ //月份

  "d+" : thisgetDate() //日

  "h+" : thisgetHours()% == ? : thisgetHours()% //小時

  "H+" : thisgetHours() //小時

  "m+" : thisgetMinutes() //分

  "s+" : thisgetSeconds() //秒

  "q+" : Mathfloor((thisgetMonth()+)/) //季度

  "S" : thisgetMilliseconds() //毫秒

  };

  var week = {

  "" : "/ue"

  "" : "/ue"

  "" : "/uec"

  "" : "/ue"

  "" : "/udb"

  "" : "/ue"

  "" : "/ud"

  };

  if(/(y+)/test(fmt)){

  fmt=fmtreplace(RegExp$ (thisgetFullYear()+"")substr( RegExp$length));

  }

  if(/(E+)/test(fmt)){

  fmt=fmtreplace(RegExp$ ((RegExp$length>) ? (RegExp$length> ? "/uf/uf" : "/u") : "")+week[thisgetDay()+""]);

  }

  for(var k in o){

  if(new RegExp("("+ k +")")test(fmt)){

  fmt = fmtreplace(RegExp$ (RegExp$length==) ? (o[k]) : ((""+ o[k])substr((""+ o[k])length)));

  }

  }

  return fmt;

  }

  

  

  測試三次

  成績毫秒

  成績毫秒

  成績毫秒

  平均毫秒

  本著完美主義的態度自己重新造了個更好的輪子分享給需要的同學們代碼如下

代碼如下  

  /**

  * 對日期進行格式化

  * @param date 要格式化的日期

  * @param format 進行格式化的模式字符串

  * 支持的模式字母有

  * y:年

  * M:年中的月份()

  * d:月份中的天()

  * h:小時()

  * m:分()

  * s:秒()

  * S:毫秒()

  * q:季度()

  * @return String

  * @author yaniswang@gmailcom

  */

  function dateFormat(date format) {

  if(format === undefined){

  format = date;

  date = new Date();

  }

  var map = {

  "M": dategetMonth() + //月份

  "d": dategetDate() //日

  "h": dategetHours() //小時

  "m": dategetMinutes() //分

  "s": dategetSeconds() //秒

  "q": Mathfloor((dategetMonth() + ) / ) //季度

  "S": dategetMilliseconds() //毫秒

  };

  format = formatreplace(/([yMdhmsqS])+/g function(all t){

  var v = map[t];

  if(v !== undefined){

  if(alllength > ){

  v = + v;

  v = vsubstr(vlength);

  }

  return v;

  }

  else if(t === y){

  return (dategetFullYear() + )substr( alllength);

  }

  return all;

  });

  return format;

  }

  

  使用方法

  dateFormat(yyyyMMdd hh:mm:ss);

  dateFormat(new Date() yyyyMMdd hh:mm:ss);

  

  測試三次

  成績毫秒

  成績毫秒

  成績毫秒

  平均毫秒

  經過改造的函數整體上性能提升明顯毫秒提升到毫秒減少了毫秒整體降到原%的時間性能提升一倍以上並且從原形注入方式改為靜態函數方式更優雅大方


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20250.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.