2011-12-07 15 views
19

Ho 2 oggetti data. Voglio prendere la data da uno e il tempo dall'altro e combinarli in un nuovo oggetto data.Come unire due date in JavaScript?

date.toString() = Wed Dec 21 2011 00:00:00 GMT+0000 (GMT) 
time.toString() = Sun Dec 31 2000 03:00:00 GMT+0000 (GMT) 

# I want to end up with 
datetime.toString() = Wed Dec 21 2011 03:00:00 GMT+0000 (GMT) 

Come posso realizzare al meglio?

+2

Avete bisogno di più informazioni rispetto a [questo] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)? – Jon

risposta

36
var datetime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 
         time.getHours(), time.getMinutes(), time.getSeconds()); 
+9

Si noti che 'getYear' è deprecato e dovrebbe essere impostato su' getFullYear'. Inoltre, 'getDay' restituisce il giorno della settimana e deve essere passato a' getDate'. –

+0

Per quanto mi risulta, questa soluzione non tiene conto dell'ora legale? – chmanie

1
var msPerDay = 1000 * 60 * 60 * 24; 
var newDateTime = new Date(date.getTime() + (time.getTime() % msPerDay)); 

EDIT: miniera assume variabile data è una data senza alcun tempo.

1

Non so se questo è il migliore, ma si può provare il seguente:

datetime = new Date(
    date.getUTCFullYear(), 
    date.getUTCMonth(), 
    date.getUTCDate(), 
    time.getUTCHours(), 
    time.getUTCMinutes(), 
    time.getUTCSeconds() 
); 

Per ulteriori riferimenti sull'oggetto Date aspetto here.

+0

non ha funzionato per me - ha rotto la TZ e incasinato l'ora – Kuf

+0

@Kuf puoi essere un po 'più specifico e magari dare un esempio? Che cosa stai cercando di realizzare esattamente? Se è molto diverso da quello che l'OP sta chiedendo, dovresti prendere in considerazione l'idea di iniziare/porre la tua domanda. –

+0

Ho lasciato questo commento come un avvertimento. nel tuo codice, prendi l'ora locale, quindi la converti in UTC, quindi la memorizzi come locale, che mette a disagio il TZ. L'ho risolto eliminando "UTC" dal nome di ogni funzione (come @pna answer). Spero che abbia un senso. – Kuf

2

è possibile utilizzare funzioni di stringa per costruire la stringa di destinazione ...

datetime = date.toString().substr(0,16) + time.toString().substr(16,40) 

quindi se avete bisogno di avere come un oggetto data, dargli da mangiare in una new date()

5

Che ne dite di qualcosa di simile :

var year = date.getFullYear(), 
    month = date.getMonth(), 
    day = date.getDate(); 

time.setFullYear(year); 
time.setMonth(month); 
time.setDate(day); 
3
var parts = ['Hours', 'Minutes', 'Seconds', 'Milliseconds']; 
for (var i=0, p; p=parts[i], i<parts.length; i++) { 
    date['setUTC'+p](time['getUTC'+p]()); 
} 
1

Ecco un metodo che utilizza regexp per sostituire il tempo data e quindi creat e il nuovo oggetto Date.

dateTime = new Date(date.toString().replace(/(\d\d:){2}\d{2}/,/(\d\d:){2}\d{2}/.exec(time.toString())[0]));