var d = new Date();
d.setMonth(d.getMonth() - 3);
Esto funciona para enero. Ejecute este fragmento:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
Hay algunas advertencias ...
Un mes es algo curioso. ¿Cómo se define 1 mes? ¿30 dias? La mayoría de la gente dirá que hace un mes significa el mismo día del mes en la cita del mes anterior necesaria . Pero más de la mitad del tiempo, es decir, hace 31 días, no 30. Y si hoy es el 31 del mes (y no es agosto o diciembre), ese día del mes no existe en el mes anterior.
Curiosamente, Google acepta JavaScript si le pregunta qué día es un mes antes de otro día :
También dice que un mes dura 30.4167 días :
Entonces, ¿es un mes antes del 31 de marzo el mismo día que un mes antes del 28 de marzo, 3 días antes? Todo esto depende de lo que quiere decir con "un mes antes". Ve a conversar con el propietario de tu producto.
Si desea hacer lo que hace momentjs y corregir estos errores del último día del mes moviéndose al último día del mes, puede hacer algo como esto:
const d = new Date("March 31, 2019");
console.log(d.toLocaleDateString());
const month = d.getMonth();
d.setMonth(d.getMonth() - 1);
while (d.getMonth() === month) {
d.setDate(d.getDate() - 1);
}
console.log(d.toLocaleDateString());
Si sus requisitos son más complicados que eso, use algunas matemáticas y escriba un código. Eres un desarrollador! ¡No tienes que instalar una biblioteca! ¡No tiene que copiar y pegar desde stackoverflow! ¡Puede desarrollar el código usted mismo para hacer exactamente lo que necesita!
Recomiendo usar una biblioteca llamada Moment.js.
Está bien probado, funciona en varios navegadores y en el lado del servidor (lo estoy usando tanto en proyectos angulares como de nodos). Tiene un gran soporte para fechas locales.
http://momentjs.com/
.format()
devuelve una representación de cadena de fecha con formato ISO 8601 . También puede usarlo con un formato de fecha personalizado como este:.format('dddd, MMMM Do YYYY, h:mm:ss a')
fuente
Un "trazador de líneas" (en muchas líneas para una fácil lectura)) para colocar directamente en una variable:
fuente
Para simplificar las cosas, puede usar DateJS, una biblioteca de fechas para JavaScript:
http://www.datejs.com/
Código de ejemplo para ti:
fuente
Esto debería manejar la suma / resta, solo ponga un valor negativo para restar y un valor positivo para sumar. Esto también resuelve el problema del crossover mensual.
fuente
Si el
setMonth
método ofrecido por gilly3 no es el que está buscando, considere:Se puede usar por cualquier cantidad de tiempo, solo configure los múltiplos correctos.
fuente
Date
clase, y por mucho que se prefiera Date.js, al menos modela un calendario proleptico indulgente que es lo suficientemente bueno para uso casual.setTime()
?Me gusta la simplicidad de la respuesta de gilly3 , pero los usuarios probablemente se sorprenderán de que un mes antes del 31 de marzo sea el 3 de marzo. Elegí implementar una versión que se mantenga a fin de mes, así que un mes antes del 28, 29, 30 de marzo, y el 31 será el 28 de febrero cuando no sea un año bisiesto.
fuente
Ya hay una respuesta elegante, pero creo que es difícil de leer, así que hice mi propia función. Para mis propósitos, no necesitaba un resultado negativo, pero no sería difícil de modificar.
fuente
fuente
Este es el código más pequeño y fácil.
Declarar variable que tiene fecha actual. entonces solo usando la función incorporada setMonth podemos obtener una fecha de retroceso de 3 meses.
fuente
En mi caso, necesitaba restar 1 mes a la fecha actual. La parte importante era el número del mes, por lo que no importa en qué día del mes actual se encuentre, necesitaba el mes pasado. Este es mi código:
Restar 1 mes a la fecha real no es precisa, es por eso que en primer lugar configuro el primer día del mes (el primer día de cualquier mes siempre es el primer día) y en segundo lugar resto 1 día, que siempre lo envía al último mes. Espero ayudarte, amigo.
fuente
fuente
Pase un objeto JS Date y un número entero de cuántos meses desea sumar / restar.
monthsToAdd
puede ser positivo o negativo Devuelve un objeto de fecha JS.Si
originalDateObject
es el 31 de marzo y pasa -1 comomonthsToAdd
, entonces su fecha de salida será el 28 de febrero.Si pasa una gran cantidad de meses, digamos 36, también manejará el ajuste del año correctamente.
fuente
fuente
fuente