Как получить смещение часового пояса Австралии / Сиднея в javascript / nodejs? - PullRequest
1 голос
/ 06 августа 2020

Исходя из летнего времени, смещение часового пояса Austalia / Sydney (разница между UT C и AEST) составляет +10: 00 (с первого воскресенья апреля) и +11: 00 (с первого воскресенья октября).

Разница составляет 600 минут или 660 минут.

Как получить разницу во времени в javascript / nodejs / moment js? Независимо от серверного времени?

Ответы [ 2 ]

4 голосов
/ 06 августа 2020

С Moment JS это очень просто. Вы можете попробовать различные варианты из Документы

var Apr = moment("2020-04-05").tz("Australia/Sydney").format('Z');
var Oct = moment("2020-10-04").tz("Australia/Sydney").format('Z');
    
console.log("Difference from April first Sunday",Apr);
console.log("Difference from October first Sunday",Oct);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.4.1/moment-timezone-with-data-2010-2020.min.js"></script>
3 голосов
/ 06 августа 2020

Возможно, есть «лучший» способ сделать это, я не проводил никаких исследований, чтобы узнать, но тогда зачем мне исследовать

Я буквально только что создал эту функцию, используя Intl .DateTimeFormat

Работает как в современных браузерах, так и в современных nodejs

function getTZoffset(timeZone, d, m, y) {
  const date = Date.UTC(y, m - 1, d, 0, 0, 0);
  const tgt = Intl.DateTimeFormat('en', { timeZone, dateStyle: "short", timeStyle: 'short', hour12: false }).format(date).split(',');
  const utc = Intl.DateTimeFormat('en', { timeZone: 'UTC', dateStyle: "short" }).format(date).split(',');
  const tgtTimes = tgt[1].split(':').map(Number);
  const tgtTime = (tgtTimes[0] % 24) * 60 + tgtTimes[1]
  const utcTime = tgt[0] === utc[0] ? 0 : 24 * 60;
  return tgtTime - utcTime;
}

for (let m = 1; m <= 12; m++) {
  console.log(`Sydney/Australia 1/${m}/2020: ${getTZoffset('Australia/Sydney', 1, m, 2020)}`);
}
for (let m = 1; m <= 12; m++) {
  console.log(`America/New_York 1/${m}/2020: ${getTZoffset('America/New_York', 1, m, 2020)}`);
}
...