¿Cómo llegar 30 días antes de la fecha actual?

95

Tengo un cuadro de entrada de calendario de inicio y un cuadro de entrada de calendario de fin. Queremos que el cuadro de entrada del calendario de inicio predeterminado sea 30 días antes de la fecha actual y que el cuadro de entrada del calendario final sea la fecha actual. Aquí está mi cita vars.

var today = new Date(),
    dd    = today.getDate(),
    mm    = today.getMonth(),
    yyyy  = today.getFullYear(),
    month = ["January", "February", "March",
        "April", "May", "June", "July", "August",
        "September", "October" "November", "December"],
    startdate = month[mm] + ", " + yyyy.toString();

La fecha de finalización sería algo así como var enddate = startdate - 30;Obviamente, esto no funcionará.

Entonces, si la fecha actual es el 30 de diciembre de 2011, me gustaría que la fecha de inicio fuera el 1 de diciembre de 2011.

EDITAR: Mi pregunta fue respondida ... algo así. Date.today();y Date.today().add(-30);trabajo, pero necesito la fecha en formato January 13, 2012. No Fri Jan 13 2012 10:48:56 GMT -055 (EST). ¿Alguna ayuda?

MÁS EDITAR: Al momento de escribir estas líneas , es 2018. Solo use Moment.js . Es el mejor.

Jesse Atkinson
fuente
stackoverflow.com/questions/563406/… Creo que eso podría ayudar.
Tim Withers

Respuestas:

149

Intente usar la excelente biblioteca de fechas de JavaScript de Datejs (el original ya no se mantiene, por lo que puede estar interesado en esta bifurcación mantenida activamente ):

Date.today().add(-30).days(); // or...
Date.today().add({days:-30});

[Editar]

Consulte también la excelente biblioteca de fechas de JavaScript Moment.js :

moment().subtract(30, 'days'); // or...
moment().add(-30, 'days');
maerics
fuente
3
Estaba luchando por obtener las fechas de inicio y finalización 30 días antes y después de hoy en UTC sin la hora. Esto funcionó:moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD")
Dylan Valade
3
Usé el moment()enfoque y agregué el toDate()método para recuperar el objeto de fecha de JavaScript. ¡Gracias!
Brylie Christopher Oxley
4
¿Por qué necesitarías usar una biblioteca para esto? Eso parece una locura.
Harry
1
¿Puede recomendar una biblioteca para console.log?
Andre Elrico
150

Prueba esto

var today = new Date()
var priorDate = new Date().setDate(today.getDate()-30)

Como señaló @Neel, este método devuelve en formato de marca de tiempo Javascript. Para volver a convertirlo en un objeto de fecha, debe pasar lo anterior a un nuevo objeto de fecha; new Date(priorDate).

Rory McCrossan
fuente
14
Sin usar una biblioteca externa, esta solución es la que más me gusta. Gracias.
Gowiem
16
Tenga en cuenta que este método se devuelve en formato de marca de tiempo Javascript. Para volver a convertirlo al objeto de fecha, debe pasar lo anterior anew Date(priorDate)
Neel
1
¡A veces solo quieres vainilla js sin biblioteca! Gracias :)
Andrew McOlash
Me sale setDate () no es una función
Chovy
1
@chovy, la única forma en que puedo imaginar que está recibiendo ese error es porque no está llamando setDate()a un Dateobjeto. Sin embargo, es imposible diagnosticar sin ver su código.
Rory McCrossan
86

Aquí tienes una fea solución:

var date = new Date(new Date().setDate(new Date().getDate() - 30));
Nahn
fuente
24
Hilarantemente, esta es la mejor solución.
Mark Rogers
8
De acuerdo, esta es la mejor solución. Esta es exactamente la solución de la respuesta de Rory McCrossan, pero concisa y completa (no se requieren bibliotecas externas).
Dan Nissenbaum
7
@MarkRogers "Hilarantemente" es la palabra correcta. Las fechas de JavaScript son realmente absurdas.
JosephStyons
Sí, esta es una solución simple y mejor.
Sachini Witharana
38
startDate = new Date(today.getTime() - 30*24*60*60*1000);

El .getTime()método devuelve una marca de tiempo JS estándar (milisegundos desde el 1 de enero de 1970) en la que puede usar operaciones matemáticas regulares, que pueden retroalimentarse directamente al objeto Date.

Marc B
fuente
8

Obtenga los próximos 30 días a partir de hoy

let now = new Date()
console.log('Today: ' + now.toUTCString())
let next30days = new Date(now.setDate(now.getDate() + 30))
console.log('Next 30th day: ' + next30days.toUTCString())

Obtenga el formulario de los últimos 30 días hoy

let now = new Date()
console.log('Today: ' + now.toUTCString())
let last30days = new Date(now.setDate(now.getDate() - 30))
console.log('Last 30th day: ' + last30days.toUTCString())

WasiF
fuente
5

Javascript puede manejarlo sin bibliotecas externas.

var today = new Date();
var dateLimit = new Date(new Date().setDate(today.getDate() - 30));

document.write(today + "<br/>" + dateLimit)

Freddy
fuente
2

Fácil.(Using Vanilla JS)

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000);

ISOFormat?

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
manish kumar
fuente
1

Yo uso date.js . Maneja esto fácilmente y se ocupa de todas las maldades de los años bisiestos.

Diodeus - James MacFarlane
fuente
1

Preferiré el momento js

startDate = moment().subtract(30, 'days').format('LL')  // January 29, 2015

endDate = moment().format('LL'); // February 28, 2015
Linoy
fuente
0

Esta es una versión ES6

let date = new Date()
let newDate = new Date(date.setDate(date.getDate()-30))
console.log(newDate.getMonth()+1 + '/' + newDate.getDate() + '/' + newDate.getFullYear() )
Lawrence Edmondson
fuente
¿En qué se diferencia esto de cualquiera de las otras respuestas, como esta ? Además, no hay nada aquí que no se haya podido hacer en ES5 ... o incluso en ES3.
Heretic Monkey
0

Puede hacerlo simplemente a través de 1 línea de código usando moment en Node JS. :)

    let lastOneMonthDate = moment().subtract(30,"days").utc().toISOString()

No quiero formato UTC, MÁS FÁCIL: P

    let lastOneMonthDate = moment().subtract(30,"days").toISOString()
Shagun Pruthi
fuente
0

Si no está inclinado a momentjs, puede usar esto:

let x = new Date()

x.toISOString(x.setDate(x.getDate())).slice(0, 10)

Básicamente, obtiene la fecha actual (valor numérico de la fecha del mes actual) y luego establece el valor. Luego se convierte en formato ISO del que corte la fecha numérica pura (es decir, 2019-09-23)

Espero que ayude a alguien.

Usman Khalil
fuente
0

let today = new Date()

let last30Days = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 30)

last30Days estará en el objeto de fecha

Kevin Chandra
fuente