He estado usando esta función, pero me gustaría saber cuál es la forma más eficiente y precisa de obtenerla.
function daysInMonth(iMonth, iYear) {
return 32 - new Date(iYear, iMonth, 32).getDate();
}
javascript
date
Chatu
fuente
fuente
return new Date(year, month + 1, 0).getDate();
var d=new Date();d.setFullYear(year, month, date);
.month
es 12 ? ¿No debería elDate
constructor tomar un valor de 0 a 11 ?Si llama a esta función con frecuencia, puede ser útil almacenar en caché el valor para un mejor rendimiento.
Aquí está la versión de almacenamiento en caché de la respuesta de FlySwat :
fuente
Date
(por lo que no hay una respuesta universal a esa pregunta) y de la frecuencia con la que su código llamarádayInMonth
con los mismos valores. Entonces, la única respuesta sensata es: ¡perfile tu código y compáralo!cache
, utilizolocalStorage
.Algunas respuestas (también en otras preguntas) tenían problemas de años bisiestos o usaban el objeto Date. Aunque javascript
Date object
cubre aproximadamente 285616 años (100,000,000 de días) a ambos lados del 1 de enero de 1970, estaba harto de todo tipo de inconsistencias de fechas inesperadas en diferentes navegadores (más notablemente del año 0 al 99). También tenía curiosidad por saber cómo calcularlo.Así que escribí un algoritmo simple y, sobre todo, pequeño para calcular el número correcto de días ( Proleptic Gregorian / Astronomical / ISO 8601: 2004 (cláusula 4.3.2.1), por lo que el año
0
existe y es un año bisiesto y se admiten años negativos ) un mes y un año determinados.Utiliza el algoritmo de cortocircuito bitmask-modulo leapYear (ligeramente modificado para js) y el algoritmo común mod-8 month.
Tenga en cuenta que en la
AD/BC
notación, el año 0 AD / BC no existe: ¡en cambio, el año1 BC
es el año bisiesto!SI necesita tener en cuenta la notación BC, simplemente reste un año del valor anual (de lo contrario positivo) primero. (O reste el año
1
para obtener más cálculos de años).¡Tenga en cuenta que los meses deben basarse en 1!
Tenga en cuenta que este es un algoritmo diferente a la búsqueda de números mágicos que usé en mi Javascript para calcular la respuesta del día del año (1 - 366) , porque aquí la rama adicional para el año bisiesto solo se necesita para febrero.
fuente
Para eliminar la confusión, probablemente haría que la cadena del mes se base, ya que actualmente se basa en 1.
fuente
Con moment.js puedes usar el método daysInMonth ():
fuente
Aquí va
fuente
Sintaxis de ES6
devoluciones
fuente
fuente
Considerando los años bisiestos:
fuente
Cálculo directo de una sola línea (sin objeto Date):
Variación con meses basados en 0:
fuente
Si desea conocer el número de días del mes actual de un objeto Date, considere el siguiente método:
Entonces puedes ejecutarlo así:
fuente
En una sola línea:
fuente
Puede ser un poco exagerado en comparación con la respuesta seleccionada :) Pero aquí está:
Encontré el código anterior aquí: https://github.com/ElemeFE/element/blob/dev/src/utils/date-util.js
Encontré el código anterior aquí: https://github.com/datejs/Datejs/blob/master/src/core.js
fuente
Si va a pasar una variable de fecha, esto puede ser útil
fuente
Quizás no sea la solución más elegante, pero fácil de entender y mantener; y está probado en batalla.
fuente