¿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.


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');

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).


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));

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.


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())


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)


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();


1

Preferiré el momento js

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

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

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() )

¿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()

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.


0

let today = new Date()

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

last30Days estará en el objeto de fecha

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.