Days in month perf test (v3)

Revision 3 of this benchmark created on


Test runner

Ready to run.

Testing in
TestOps/sec
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 <= 4000; y++) {
  for (var m = 1; m <= 12; m++) {
    var d = getDaysInMonth(m, y);
  }
}
ready
Caleb getDate()
function numberOfDays(year, month) {
  var d = new Date(year, month, 0);
  return d.getDate();
}

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

for (var y = 1; y <= 4000; 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