Days in month perf test (v6)

Revision 6 of this benchmark created by TrueBlueAussie on


Test runner

Ready to run.

Testing in
TestOps/sec
Caleb getDate()
function numberOfDays(year, month) {
    var d = new Date(year, month, 0);
    return d.getDate();
}

for (var y = 1; y <= 2000; y++) {
    for (var m = 1; m <= 12; m++) {
        var d = numberOfDays(y, m);
    }
}
ready
nickf switch and boolean
function daysInMonth(m, y) { // m is 0 indexed: 0-11
    switch (m) {
        case 1 :
            return (y % 4 == 0 && y % 100) || y % 400 == 0 ? 29 : 28;
        case 8 : case 3 : case 5 : case 10 :
            return 30;
        default :
            return 31
    }
}

for (var y = 1; y <= 2000; y++) {
    for (var m = 1; m <= 12; m++) {
        var d = daysInMonth(y, m-1);
    }
}
ready
GitaarLAB boolean + binary
function daysInMonth(m, y){
  return(m===2?y&3||!(y%25)&&y&15?28:29:30+(5546>>m&1));
}

for (var y = 1; y <= 2000; y++) {
    for (var m = 1; m <= 12; m++) {
        var d = daysInMonth(m, y);
    }
}
ready
TrueBlueAussie boolen + binary
function getDaysInMonth(m, y) {
    return (m === 2) ? (!((y % 4) || (!(y % 100) && (y % 400))) ? 29 : 28) : 30 + ((m + (m >> 3)) & 1);
}

for (var y = 1; y <= 2000; y++) {
    for (var m = 1; m <= 12; m++) {
        var d = getDaysInMonth(m, y);
    }
}
ready
James regex + boolean
function getDaysInMonth(m, y) {
   return /8|3|5|10/.test(--m)?30:m==1?(!(y%4)&&y%100)||!(y%400)?29:28:31;
}

for (var y = 1; y <= 2000; y++) {
    for (var m = 1; m <= 12; m++) {
        var d = getDaysInMonth(m, y);
    }
}
ready

Revisions

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

  • Revision 2: published on
  • Revision 3: published on
  • Revision 4: published by TrueBlueAussie on
  • Revision 5: published by TrueBlueAussie on
  • Revision 6: published by TrueBlueAussie on