2012-01-12 9 views
48

Tengo un cuadro de entrada de calendario de inicio y un cuadro de entrada de calendario final. Queremos que los valores predeterminados comiencen el cuadro de entrada del calendario 30 días antes de la fecha actual y que el cuadro de entrada del calendario final sea la fecha actual. Aquí está mi fecha vars.¿Cómo llegar 30 días antes de la fecha actual?

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 va a funcionar.

lo tanto, si la fecha actual es el 30 de diciembre de 2011 Me gustaría tener la fecha de inicio para leer 1 de diciembre de 2011.

EDIT: Mi pregunta fue respondida ... más o menos. La fecha de hoy(); y Date.today(). add (-30); trabajo pero necesito la fecha en el formato del 13 de enero de 2012. No vie 13 de enero 2012 10:48:56 GMT -055 (EST). ¿Alguna ayuda?

+0

http://stackoverflow.com/questions/563406/add-days-to-datetime -using-java-script Creo que eso podría ayudar. –

Respuesta

87

Trate de usar la excelente Datejs JavaScript date library (el original ya no se mantiene por lo que puede estar interesado en this actively maintained fork lugar):

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

[Editar]

Véase también el excelente Moment.js JavaScript date library:

moment().subtract(30, 'days'); // or... 
moment().add(-30, 'days'); 
+2

Ojalá tuviera 10 votos para usted ... – Ryley

+0

¿Por qué el voto a favor? – maerics

+0

Gracias por indicarme Date.js. –

1

Yo uso date.js. Se maneja esto fácilmente y se ocupa de todos los malestares del año bisiesto.

33
startDate = new Date(today.getTime() - 30*24*60*60*1000); 

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

+3

+1 uno pero voy a criticar las molestias como segundos intercalares, etc. – maerics

+0

+1 - Datejs es más fácil de leer; esto es más fácil de implementar – Blazemonger

96

probar este

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

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

+11

Sin usar una biblioteca externa, me gusta esta solución de la mejor manera. Gracias. – Gowiem

+9

Tenga en cuenta que este método regresa en formato de Timestamp de Javascript.Para convertirlo en objeto actualizado, debe pasar lo anterior a 'new Date (priorDate)' – Neel

1

yo preferiría momento js

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

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

Aquí hay una solución para usted feo:

var date = new Date(new Date().setDate(new Date().getDate() - 30)); 
+9

Hilarantemente, esta es la mejor solución. –

+13

En Javascript, nadie puede oírte gritar ... –

+1

De acuerdo, esta es la mejor solución. Esta es * exactamente * la solución de la respuesta de Rory McCrossan, pero conciso y completo (no se requieren bibliotecas externas). –

Cuestiones relacionadas