2011-12-07 42 views
19

Tengo 2 objetos de fecha. Quiero tomar la fecha de una y la hora de la otra y combinarlos en un nuevo objeto de fecha.¿Cómo combinar dos fechas en 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) 

¿Cómo puedo lograr esto?

+2

¿Necesita más información de la que [esto] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)? – Jon

Respuesta

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

Tenga en cuenta que 'getYear' está en desuso y debe cambiarse a' getFullYear'. Además, 'getDay' devuelve el día de la semana y debe cambiarse a' getDate'. –

+0

Por lo que yo sé, ¿esta solución no tiene en cuenta el horario de verano? – chmanie

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

EDIT: la mina asume variable de fecha es una fecha sin ningún tiempo.

1

No sé si este es el mejor, pero se puede intentar lo siguiente:

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

Para mayor referencia en el objeto Date vistazo here.

+0

no funcionó para mí - rompió el TZ y estropeó el tiempo – Kuf

+0

@Kuf ¿puede ser un poco más específico y quizás dar un ejemplo? ¿Qué estás tratando de lograr exactamente? Si es muy diferente de lo que el OP está pidiendo, debería considerar comenzar/hacer su propia pregunta. –

+0

Dejé este comentario como advertencia. en su código, toma la hora local, luego conviértala en UTC, y luego vuelva a almacenarla como local, lo que estropea la TZ. Lo resolví omitiendo el 'UTC' de cada nombre de función (como @pna answer). espero que tenga sentido. – Kuf

2

puede utilizar las funciones de cadena para construir la cadena de destino ...

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

luego, si es necesario tener como objeto la fecha, se alimentan en un new date()

5

¿Qué tal algo como esto :

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

Aquí es un método que utiliza expresiones regulares para reemplazar la hora en la fecha y luego creat e el nuevo objeto Date.

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