JS日期格式化函式效能優化篇

2022-03-03 18:33:51 字數 3136 閱讀 3172

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

對線上一些**進行了評測,以下是一些結論和優化**。

測試**如下,在同以瀏覽器中,分別對格式化函式進行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毫秒

js 日期格式化函式

對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 m...

js日期格式化函式

author ocq 對date的擴充套件,將 date 轉化為指定格式的string 月 m 日 d 12小時 h 24小時 h 分 m 秒 s 周 e 季度 q 可以用 1 2 個佔位符 年 y 可以用 1 4 個佔位符,毫秒 s 只能用 1 個佔位符 是 1 3 位的數字 eg new dat...

js日期格式化

日期格式化 使用方法1 var now new date var nowstr util.dateformat new date yyyy mm dd hh mm ss 使用方法2 var testdate new date var teststr util.dateformat new date ...