Javascript日期格式化函式效能對比

2021-07-24 22:38:40 字數 3032 閱讀 7023

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

對線上一些**進行了評測,結果如下:

測試**如下,分別對格式化函式進行50萬次計算:

**如下

複製**

var start = new date().gettime();

var date = new date();

for(var i = 0;i<500000;i++)

console.log(new date().gettime() - start);

函式1:

**如下

複製**

// 對date的擴充套件,將 date 轉化為指定格式的string

// 月(m)、日(d)、小時(h)、分(m)、秒(s)、季度(q) 可以用 1-2 個佔位符,

// 年(y)可以用 1-4 個佔位符,毫秒(s)只能用 1 個佔位符(是 1-3 位的數字)

// 例子:

// (new date()).format("yyyy-mm-dd hh:mm:ss.s") ==> 2006-07-02 08:09:04.423

// (new date()).format("yyyy-m-d h:m:s.s")      ==> 2006-7-2 8:9:4.18

date.prototype.format1 = function (fmt) ;

if (/(y+)/.test(fmt)) fmt = fmt.replace(regexp.$1, (this.getfullyear() + "").substr(4 - regexp.$1.length));

for (var k in o)

if (new regexp("(" + k + ")").test(fmt)) fmt = fmt.replace(regexp.$1, (regexp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));

return fmt;

}測試三次:

成績1:6657毫秒

成績2:6739毫秒

成績3:6747毫秒

平均:6714毫秒

函式2:

**如下

複製**

/** * 對date的擴充套件,將 date 轉化為指定格式的string * 月(m)、日(d)、12小時(h)、24小時(h)、分(m)、秒(s)、周(e)、季度(q)

可以用 1-2 個佔位符 * 年(y)可以用 1-4 個佔位符,毫秒(s)只能用 1 個佔位符(是 1-3 位的數字) * eg: * (new

date()).pattern("yyyy-mm-dd hh:mm:ss.s")==> 2006-07-02 08:09:04.423     

* (new date()).pattern("yyyy-mm-dd e hh:mm:ss") ==> 2009-03-10 二 20:09:04     

* (new date()).pattern("yyyy-mm-dd ee hh:mm:ss") ==> 2009-03-10 周二 08:09:04     

* (new date()).pattern("yyyy-mm-dd eee hh:mm:ss") ==> 2009-03-10 星期二 08:09:04     

* (new date()).pattern("yyyy-m-d h:m:s.s") ==> 2006-7-2 8:9:4.18     

*/ date.prototype.format2=function(fmt) ;        

var week = ;        

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

if(/(e+)/.test(fmt))        

for(var k in o)        

}        

return fmt;        

}測試三次:

成績1:7334毫秒

成績2:7497毫秒

成績3:7498毫秒

平均:7443毫秒

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

**如下

複製**

/*** 對日期進行格式化,

* @param date 要格式化的日期

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

*     支援的模式字母有:

*     y:年,

*     m:年中的月份(1-12),

*     d:月份中的天(1-31),

*     h:小時(0-23),

*     m:分(0-59),

*     s:秒(0-59),

*     s:毫秒(0-999),

*     q:季度(1-4)

* @return string

* @author [email protected]

*/function dateformat(date, format)

var map = ;

format = format.replace(/([ymdhmsqs])+/g, function(all, t)

return v;

}else if(t === 'y')

return all;

});return format;

}使用方法:

dateformat('yyyy-mm-dd hh:mm:ss');

dateformat(new date(), 'yyyy-mm-dd hh:mm:ss');

測試三次:

成績1:2903毫秒

成績2:2900毫秒

成績3:2896毫秒

平均:2899毫秒

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

JavaScript日期格式化

function formatdatefn timestamp,format else if typeof timestamp object var padnum function num 指定格式字元 var cfg format format yyyy mm dd hh mm ss return...

javascript 日期格式化

日期格式化是使用率非常高的,乙個實用的日期格式化工具能大大提高工作效率。date函式原型擴充套件 date.prototype.format function params var value params.value datetime var chinese params.chinese fals...

JavaScript格式化日期

查詢格式化日期的方法大都是寫日期擴充套件方法,也許是為了維持jquery easyui 原始碼完整性,1 對date的擴充套件,將 date 轉化為指定格式的string2 月 m 日 d 小時 h 分 m 秒 s 季度 q 可以用 1 2 個佔位符,3 年 y 可以用 1 4 個佔位符,毫秒 s ...