63 votes

ajouter ou soustraire la différence de fuseau horaire à la date javascript

Quelle est la meilleure approche pour ajouter ou soustraire des différences de fuseau horaire à la targetTime ci-dessous. Les valeurs de fuseau horaire GMT proviennent de la base de données dans ce format : 1.00 pour l'heure de Londres, -8.00 pour l'heure du Pacifique et ainsi de suite.

Le code ressemble à ceci :

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

96voto

alexp Points 898

Vous pouvez utiliser Date.getTimezoneOffset qui renvoie le décalage local par rapport à GMT en minutes. Notez qu'il renvoie la valeur avec le signe opposé auquel vous pourriez vous attendre. Donc GMT-5 vaut 300 et GMT+1 vaut -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);

34voto

user2875462 Points 291

Fonction simple qui fonctionne pour moi :

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

20voto

Marcos Lima Points 48

Si vous devez compenser le fuseau horaire, je recommanderais l'extrait suivant :

 var dt = new Date('2018-07-05')
dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset())
console.log(dt)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X