En términos informáticos, ¡ new Date()y las regular expressionsoluciones son lentas! Si quieres un trazador de líneas súper rápido (y súper críptico), prueba este (suponiendo que mesté enJan=1 formato). Sigo probando diferentes cambios de código para obtener el mejor rendimiento.
Mi versión más rápida actual :
Después de ver esta pregunta relacionada, verifique el año bisiesto utilizando operadores bit a bit (velocidad sorprendente) y descubra lo que representaban los números mágicos 25 y 15, se me ocurrió este híbrido optimizado de respuestas:
function getDaysInMonth(m, y) {
return m===2 ? y & 3 || !(y%25) && y & 15 ? 28 : 29 : 30 + (m+(m>>3)&1);
}
Dado el cambio de bits, esto obviamente supone que sus parámetros m& yson ambos enteros, ya que pasar números como cadenas daría como resultado resultados extraños.
JSFiddle: http://jsfiddle.net/TrueBlueAussie/H89X3/22/
Resultados de JSPerf: http://jsperf.com/days-in-month-head-to-head/5
Por alguna razón, (m+(m>>3)&1)es más eficiente que (5546>>m&1)en casi todos los navegadores.
La única competencia real por la velocidad es de @GitaarLab, así que he creado un JSPerf cabeza a cabeza para que podamos probarlo en: http://jsperf.com/days-in-month-head-to-head/5
Funciona en función de la respuesta de mi año bisiesto aquí: javascript para encontrar el año bisiesto esta respuesta aquí Verificación del año bisiesto utilizando operadores bit a bit (velocidad sorprendente) así como la siguiente lógica binaria.
Una lección rápida en meses binarios:
Si interpreta el índice de los meses deseados (Jan = 1) en binario , notará que los meses con 31 días tienen el bit 3 claro y el bit 0 establecido, o el bit 3 establecido y el bit 0 claro.
Jan = 1 = 0001 : 31 days
Feb = 2 = 0010
Mar = 3 = 0011 : 31 days
Apr = 4 = 0100
May = 5 = 0101 : 31 days
Jun = 6 = 0110
Jul = 7 = 0111 : 31 days
Aug = 8 = 1000 : 31 days
Sep = 9 = 1001
Oct = 10 = 1010 : 31 days
Nov = 11 = 1011
Dec = 12 = 1100 : 31 days
Eso significa que puede cambiar el valor 3 lugares con >> 3, XOR los bits con el original ^ my ver si el resultado está 1o 0 en la posición de bit 0 usando & 1. Nota: Resulta que +es un poco más rápido que XOR ( ^) y (m >> 3) + mda el mismo resultado en el bit 0.
Resultados de JSPerf : http://jsperf.com/days-in-month-perf-test/6