web-dev-qa-db-fra.com

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

Regardez le code ci-dessous. Quelle est la meilleure approche pour ajouter ou soustraire des différences de fuseau horaire à la variable targetTime ci-dessous. Les valeurs de fuseau horaire GMT proviennent de la base de données au format suivant: 1.00 pour l'heure londonienne, -8.00 pour l'heure pasificale, etc.

Le code ressemble à ceci:

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

Vous pouvez utiliser Date.getTimezoneOffset qui renvoie le décalage local de GMT en minutes. Notez qu'il renvoie la valeur avec le signe opposé auquel vous pouvez 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);
48
alexp

Fonction simple qui fonctionne pour moi:

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

Si vous avez besoin de compenser le fuseau horaire, je vous recommande l'extrait suivant:

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