2012-10-09 26 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); 

Sto tentando di prendere la data corrente, aggiungere tre giorni di millisecondi ad essa e far visualizzare la data stampata 3 giorni dopo dalla corrente. Ad esempio, se oggi è il 10/09/2012, mi piacerebbe che dicesse il 10/12/2012.Tentativo di aggiungere 3 giorni in millisecondi alla data corrente

questo metodo non funziona, sto ricevendo mesi e giorni di riposo. Eventuali suggerimenti?

+1

Penso che si desidera setTime piuttosto che setMilliseconds –

+0

Prova: 'dateObj.setTime (dateObj.getTime() + 8.64e7 * 3) 'ma si noti che i cambi di ora legale possono dare risultati imprevisti. Più semplice aggiungere 3 alla data: 'dateObj.setDate (dateObj.getDate() + 3)'. – RobG

risposta

38

Per aggiungere tempo, ottenere la data corrente quindi aggiungere, come millisecondi, la quantità di tempo, quindi creare un nuovo appuntamento con il valore:

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

Per spiegare ulteriormente; il motivo dataObj.setMilliseconds() non funziona perché imposta i PROPRIETÀ millisecondi di dateobj sul valore specificato (un valore compreso tra 0 e 999). Non imposta, come millisecondi, la data dell'oggetto.

// 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

Ho solo var days = 259200000 poiché è statico e non cambia mai. Grazie! Curioso, perché non ha impostato Milliseconds (giorni) per fare lo stesso? – dman

+1

Non lo so davvero. So solo dall'esperienza se si tratta di valori statici, quindi esegui i calcoli come sopra. – SReject

+4

Poiché questo è (un anno dopo) il primo elemento da aggiungere per l'aggiunta di millisecondi a una data, la ragione per cui setMilliseconds non funziona è che imposta la parte dei millisecondi dell'oggetto data. Quindi, nel normale funzionamento, si aspetta un numero compreso tra 0 e 99. Tuttavia, consente qualsiasi numero, ed è come aggiungere il valore alla data senza il componente dei millisecondi precedenti della data. –

3

Se avete bisogno di fare data calcoli in javascript, utilizzare moment.js:

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

Senza offesa per te, ma suggerire l'uso di un'intera libreria per preformare un compito così semplice sembra piuttosto finirlo. – SReject

+5

senza offesa, quando qualcun altro ha letto il mio codice, probabilmente comprenderà moment.js una riga meglio della risposta accettata. –

+2

Non c'è nulla di "semplice" in questa attività. Considerare le modifiche all'orario di ora legale. –

4

Prova questo:

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

3

Usa questo codice

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