Month name: toLocaleString() vs DateTimeFormat() vs Array vs Switch-case

Benchmark created on


Description

Fastest "<day of month> <month name>" getter.

Setup

var U = 0; // un_eliminate
var i = 0;

var date = new Date("1985-04-12T10:15:30+00:00");
var dtOptions = {day:"numeric", month:"long", timeZone:"UTC"};
var dtFormat = new Intl.DateTimeFormat("ru", dtOptions);

var monthNames = [
	"января",
	"февраля",
	"марта",
	"апреля",
	"мая",
	"июня",
	"июля",
	"августа",
	"сентября",
	"октября",
	"ноября",
	"декабря"
];

function getMonthName(n){
	switch(n){
	case  0: return "января";
	case  1: return "февраля";
	case  2: return "марта";
	case  3: return "апреля";
	case  4: return "мая";
	case  5: return "июня";
	case  6: return "июля";
	case  7: return "августа";
	case  8: return "сентября";
	case  9: return "октября";
	case 10: return "ноября";
	case 11: return "декабря";
	default: return "";
	}
};

Teardown

window.__un_eliminate__ = U;
//console.log(i);

Test runner

Ready to run.

Testing in
TestOps/sec
Date.toLocaleString()
U |= ( date.toLocaleString("ru", dtOptions) ).length;
//date.setUTCDate(date.getUTCDate()+1);
ready
Intl.DateTimeFormat()
U |= ( dtFormat.format(date) ).length;
//date.setUTCDate(date.getUTCDate()+1);
ready
array
U |= ( date.getUTCDate() +" "+ monthNames[date.getUTCMonth()] ).length;
ready
switch-case
U |= ( date.getUTCDate() +" "+ getMonthName(date.getUTCMonth()) ).length;
ready
array — dynamic
U |= ( date.getUTCDate() +" "+ monthNames[(date.getUTCMonth()+(++i))%12] ).length;
//i=(i+1)%12;
ready
switch-case — dynamic
U |= ( date.getUTCDate() +" "+ getMonthName((date.getUTCMonth()+(++i))%12) ).length;
//i=(i+1)%12;
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.