Si usted proporciona 0
como el dayValue
de Date.setFullYear
usted consigue el último día del mes anterior:
d = new Date(); d.setFullYear(2008, 11, 0); // Sun Nov 30 2008
Hay referencia a este comportamiento en mozilla . ¿Es esta una característica confiable de navegador cruzado o debería buscar métodos alternativos?
javascript
date
Conocido
fuente
fuente
Respuestas:
Las diferencias de salida se deben a diferencias en la
toString()
implementación, no porque las fechas sean diferentes.Por supuesto, solo porque los navegadores identificados anteriormente usan 0 como el último día del mes anterior no significa que continuarán haciéndolo, o que los navegadores que no figuran en la lista lo harán, pero le da credibilidad a la creencia de que debería funcionar. De la misma manera en todos los navegadores.
fuente
new Date
es por lo tanto más lento que otros métodos de cálculo que ni siquiera aparece en el gráfico Potencia : jsperf.com/days-in-month-perf-test/6Usaría una fecha intermedia con el primer día del mes siguiente y devolvería la fecha del día anterior:
fuente
today = new Date(); new Date(today.getFullYear(), today.getMonth()+1, 0).toString();
Creo que esta es la mejor solución para mí. Deje que el objeto Fecha lo calcule por usted.
Establecer el parámetro del día en 0 significa un día menos que el primer día del mes, que es el último día del mes anterior.
fuente
new Date
es tan mucho más lento que ni siquiera aparece en el gráfico Potencia : jsperf.com/days-in-month-perf-test/6En términos informáticos, ¡
new Date()
y lasregular expression
soluciones son lentas! Si quieres un trazador de líneas súper rápido (y súper críptico), prueba este (suponiendo quem
esté 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:
Dado el cambio de bits, esto obviamente supone que sus parámetros
m
&y
son 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.
Eso significa que puede cambiar el valor 3 lugares con
>> 3
, XOR los bits con el original^ m
y ver si el resultado está1
o0
en la posición de bit 0 usando& 1
. Nota: Resulta que+
es un poco más rápido que XOR (^
) y(m >> 3) + m
da el mismo resultado en el bit 0.Resultados de JSPerf : http://jsperf.com/days-in-month-perf-test/6
fuente
:)
La primera versión de respuesta que publiqué tenía un conjunto innecesario de corchetes, que fueron eliminados (por lo que te atribuí) para que pudiéramos afeitarnos de un personaje y terminar con este. Todavía estoy agradecido por ese día divertido, ¡salud!y
y lasm
variables tienen que ser enteras, no cadenas! Causa cálculos incorrectos, por ejemplo, para febrero devuelve 30. Tuve que usar laparseInt()
función para que funcione.Mi colega se topó con lo siguiente, que puede ser una solución más fácil
robado de http://snippets.dzone.com/posts/show/2099
fuente
Una ligera modificación a la solución proporcionada por lebreeze :
fuente
return new Date(iYear, 1 + iMonth, 0).getDate();
equivalente a la solución de @lebreeze.Recientemente tuve que hacer algo similar, esto es lo que se me ocurrió:
Pásalo en una fecha y devolverá una fecha establecida a principios de mes o al final del mes.
La
begninngOfMonth
función se explica por sí misma, pero lo que está sucediendo en laendOfMonth
función es que estoy incrementando el mes al siguiente mes, y luego lo usosetDate(0)
para retroceder el día hasta el último día del mes anterior, que es parte del Especificación setDate:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate https://www.w3schools.com/jsref/jsref_setdate.asp
Luego establezco la hora / minutos / segundos al final del día, de modo que si está utilizando algún tipo de API que espera un rango de fechas, podrá capturar la totalidad de ese último día. Esa parte podría ir más allá de lo que pide la publicación original, pero podría ayudar a alguien más a buscar una solución similar.
Editar: También puede hacer un esfuerzo adicional y configurar milisegundos
setMilliseconds()
si desea ser más preciso.fuente
prueba este.
ejemplo:
salida:
fuente
Esto funciona para mi. Proporcionará el último día del año y mes dado:
fuente
Este funciona muy bien:
fuente
Esto le dará el primer y último día del mes actual.
Si necesita cambiar 'año', elimine d.getFullYear () y configure su año.
Si necesita cambiar 'mes', elimine d.getMonth () y configure su año.
fuente
Prueba esto:
fuente
La siguiente función muestra el último día del mes:
Del mismo modo podemos obtener el primer día del mes:
fuente
fuente
fuente
establezca el mes que necesita para la fecha y luego configure el día en cero, por lo que el mes comienza en 1 - 31 en la función de fecha y luego obtiene el último día ^^
fuente
Aquí hay una respuesta que conserva GMT y la hora de la fecha inicial
fuente
Sé que es solo una cuestión de semántica, pero terminé usándolo de esta forma.
Como las funciones se resuelven desde el argumento interno, hacia afuera, funciona igual.
Luego puede reemplazar el año y el mes / año con los detalles requeridos, ya sea a partir de la fecha actual. O un mes / año en particular.
fuente
Si necesita el final exacto del mes en milisegundos (por ejemplo, en una marca de tiempo):
fuente