2012-10-09 34 views
22
var dateObj = new Date(); 
var val = dateObj.getTime(); 
//86400 * 1000 * 3 Each day is 86400 seconds 
var days = 259200000; 

val = val + days; 
dateObj.setMilliseconds(val); 
val = dateObj.getMonth() + 1 + "/" + dateObj.getDate() + "/" + dateObj.getFullYear(); 
alert(val); 

Estoy tratando de tomar la fecha actual, añadir tres días de milisegundos a ella, y hacer que ésta se marca de fecha 3 días después de la actual. Por ejemplo, si hoy es 10/09/2012, me gustaría decir 10/12/2012.Tratar de añadir 3 días en milisegundos a la corriente Fecha

este método no funciona, estoy recibiendo los meses y días de camino. ¿Alguna sugerencia?

+1

Creo que quieres setTime en lugar de setMilliseconds –

+0

Probar: 'dateObj.setTime (dateObj.getTime() + 8.64e7 * 3) 'pero tenga en cuenta que los cambios de horario de verano pueden dar resultados inesperados. Simpler simplemente agregar 3 a la fecha: 'dateObj.setDate (dateObj.getDate() + 3)'. – RobG

Respuesta

38

Para agregar el tiempo, obtener la fecha actual a continuación, añadir, como milisegundos, la cantidad específica de tiempo, a continuación, crear una nueva cita con el valor:

// get the current date & time 
var dateObj = Date.now(); 

// Add 3 days to the current date & time 
// I'd suggest using the calculated static value instead of doing inline math 
// I did it this way to simply show where the number came from 
dateObj += 1000 * 60 * 60 * 24 * 3; 

// create a new Date object, using the adjusted time 
dateObj = new Date(dateObj); 

Para explicar esto aún más; el motivo por el que dataObj.setMilliseconds() no funciona es porque establece los PROPIEDADES de los milisegundos de la fechaobj en el valor especificado (un valor entre 0 y 999). No establece, como milisegundos, la fecha del objeto.

// assume this returns a date where milliseconds is 0 
dateObj = new Date(); 

dateObj.setMilliseconds(5); 
console.log(dateObj.getMilliseconds()); // 5 

// due to the set value being over 999, the engine assumes 0 
dateObj.setMilliseconds(5000); 
console.log(dateObj.getMilliseconds()); // 0 
+1

Solo var days = 259200000 ya que es estático y nunca cambia. ¡Gracias! Curioso, ¿por qué los setMilliseconds (días) no hicieron lo mismo? – dman

+1

Realmente no lo sé. Solo sé por experiencia si son valores estáticos, y luego hago los cálculos como se indica arriba. – SReject

+4

Dado que este es (un año después) el primer elemento que aparece al agregar milisegundos a una fecha, el motivo por el que setMilliseconds no funciona es que establece la parte de milisegundos del objeto de fecha. Entonces, en operación normal, espera un número de 0-999. Sin embargo, permite cualquier número, y es como agregar el valor a la fecha sin el componente de milisegundos anterior de la fecha. –

3

Si necesita hacer cálculos de fecha en JavaScript, utilice moment.js:

moment().add('days', 3).calendar(); 
+7

Sin ofenderlo, pero sugerir el uso de una biblioteca completa para realizar una tarea tan simple parece bastante exagerado. – SReject

+5

sin ofender, cuando alguien más lea mi código, probablemente entenderá moment.js una línea mejor que la aceptada. –

+2

No hay nada "simple" en esta tarea. Considere los cambios en el horario de verano. –

4

Prueba esto:

var dateObj = new Date(Date.now() + 86400000 * 3);

3

Usar este código

var dateObj = new Date(); 
var val = dateObj.getTime(); 
//86400 * 1000 * 3 Each day is 86400 seconds 
var days = 259200000; 

val = val + days; 
dateObj = new Date(val); // ********important*********// 
val = dateObj.getMonth() + 1 + "/" + dateObj.getDate() + "/" + dateObj.getFullYear(); 
alert(val);