2012-12-03 10 views
5

Qual è il modo migliore in JavaScript per impostare la parte di data di un oggetto di data JavaScript senza influire sulla porzione di tempo?Aggiornamento della parte di data di un oggetto javascript senza modificare la porzione di tempo

Diciamo che avere una data come questo Wed Oct 31 2012 10:15:00 GMT-0400 (EDT)

E si desidera aggiornare per essere 1 novembre senza cambiare il tempo.

A prima vista, si potrebbe pensare che questo dovrebbe funzionare,

exampledate.setFullYear(2012); 
exampledate.setMonth(10); 
exampledate.setDate(1); 

ma il risultato è Sat Dec 01 2012 10:15:00 GMT-0500 (EST)

Penso ragione di questo è che Ottobre è 31 giorni e novembre ha solo 30. Dal momento che questo ovviamente non funziona sempre. Quali sono le mie altre opzioni? Dovrò creare un nuovo oggetto data?

+1

Stai parlando della conversione da EDT a EST? In tal caso, tieni presente che il 4 novembre alle 2:00, i paesi che utilizzano EDT passano a EST mentre ricevono magicamente un'ora aggiuntiva. –

+1

Inoltre, dovresti chiamare 'setMonth' su 11 e non su 10? Vedo la data finale come dicembre. –

+1

Questo è il problema. Poiché la data originale era il 31/10/2012 e sto impostando la data per l'31/11/2012, che non è una data reale, la seconda riga sta cambiando la data fino al 1 dicembre. La linea finale non sta facendo nulla. – plusplusben

risposta

2

JavaScript I metodi di impostazione degli oggetti di data consentono spesso (facoltativamente) di impostare più componenti di data/ora tutti insieme (oltre al componente principale), a seconda della situazione --- questo è ciò che si desidera fare.

Per il vostro caso d'uso, la sintassi per setFullYear è setFullYear(year,month,day), così oltre a impostare in modo esplicito l'anno (che causerebbe il mese e la data per essere implicitamente aggiornato in base alla data iniziale), si potrebbe anche in modo esplicito impostare il mese e il giorno mentre ci sei. Per esempio:

var d = new Date(); 
d.setFullYear(2020,10,3); 

tornerà

Tue Nov 03 2020 13:10:34 GMT-0500 (EST) 

Vedere the JavaScript setFullYear() method per maggiori dettagli.

Poiché i componenti dell'ora dell'oggetto Date (ad esempio ore, minuti, secondi, millisecondi) non dipendono dalle parti della data (anno, mese, data), i componenti dell'ora iniziale verranno mantenuti. Se è necessario aggiornare i componenti dell'ora, è possibile utilizzare in modo sicuro setHours() o altri metodi in base alle esigenze, poiché non si verificheranno aggiornamenti impliciti ai componenti della data.

+0

Fantastico, non sapevo che potessi farlo. – plusplusben

2

Prima impostare la data, quindi il mese.

Problemi correlati