2011-09-13 19 views
20

Echa un vistazo al código siguiente. Cuál es el mejor enfoque para sumar o restar las diferencias de zona horaria a la variable targetTime a continuación. Los valores de la zona horaria GMT provienen de la base de datos en este formato: 1.00 para la hora de Londres, -8.00 para la hora Pasific y así sucesivamente.sumar o restar la diferencia de zona horaria a javascript Fecha

código es el siguiente:

date = "September 21, 2011 00:00:00"; 
targetTime = new Date(date); 

Respuesta

39

Usted puede utilizar Date.getTimezoneOffset que devuelve la diferencia local a GMT en cuestión de minutos. Tenga en cuenta que devuelve el valor con el signo opuesto que podría esperar. Entonces GMT-5 es 300 y GMT + 1 es -60.

var date = "September 21, 2011 00:00:00"; 
var targetTime = new Date(date); 
var timeZoneFromDB = -7.00; //time zone value from database 
//get the timezone offset from local time in minutes 
var tzDifference = timeZoneFromDB * 60 + targetTime.getTimezoneOffset(); 
//convert the offset to milliseconds, add to targetTime, and make a new Date 
var offsetTime = new Date(targetTime.getTime() + tzDifference * 60 * 1000); 
+1

esto sería correcto, pero lo que si es el ahorro de tiempo en su país y ahora la luz del día si su GMT se dice 2, ahora sería + 1 – halliewuud

+5

cuentas getTimezoneOffset para el horario de verano. Estoy en la zona horaria del Este de EE. UU., Que normalmente es GMT-5, pero GMT-4 con horario de verano. Si llamo getTimezoneOffset en mi navegador en este momento, obtengo 240, que es GMT-4. Eso, por supuesto, solo maneja el horario de verano para la hora local. El desplazamiento de la zona horaria desde el DB debe ajustarse para el horario de verano en el back-end. – alexp

6

función simple que funciona para mí:

adjustForTimezone(date:Date):Date{ 
    var timeOffsetInMS:number = date.getTimezoneOffset() * 60000; 
    date.setTime(date.getTime() - timeOffsetInMS); 
    return date 
} 
Cuestiones relacionadas