Момент JS - Как получить время из другого часового пояса - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть строка «24 января 2019 12:00 по тихоокеанскому времени», где время установлено в часовом поясе браузера.Как бы я использовал момент, чтобы преобразовать это в другой часовой пояс (т.е. - America / New_York), а затем получить время в этом часовом поясе?

Итак, в моем примере выше у меня есть строка '24 января 2019 г. 12: 00 PST ', где часовой пояс находится в часовом поясе браузера (Сиэтл).Я пытаюсь получить 24 января 2019 года в 15:00 при преобразовании его в часовой пояс Нью-Йорка.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Как насчет просто:

var s = "Jan 24, 2019 12:00 PST";
var d = new Date(s);
var m = moment(d).tz("America/New_York");
console.log(m.format("MMM DD Y, hh:mm z"));

Единственное беспокойство здесь - где вы получили эту строку.Насколько я знаю, эта строка работает в любом браузере.Но конструктор Date, похоже, не поддерживает именованные смещения, такие как "PST", за пределами США, поэтому, если вы получили CEST для центральноевропейского времени, это не сработает.В этом случае просто отрежьте PST и проанализируйте его с помощью функций парсинга строк Moment.Поскольку вы уже знаете, что строка была сгенерирована в той же зоне, в которой находится пользователь, она вам все равно не нужна.

В качестве альтернативы всему этому, избегайте полной необходимости этой строки и получайте дату вISO с исходного сервера, или если строка пришла из какого-то другого фрагмента Javascript, просто получите этот объект Date и передайте его непосредственно в Moment.

0 голосов
/ 27 февраля 2019

Этот комментарий подчеркивает проблему с синтаксическим анализом часовых поясов, таких как «PST» moment.js - Как проанализировать строку строки даты с текстовым часовым поясом, таким как «PST»?

Если вы абсолютноВы не можете получить строку в другом формате, вы можете выделить последние три символа и провести собственное сравнение с таким объектом:

var testDate = "Jan 24, 2019 12:00 PST";
var timezones = {
    " GMT": " +0000",
    " EDT": " -0400",
    " EST": " -0500",
    " CDT": " -0500",
    " CST": " -0600",
    " MDT": " -0600",
    " MST": " -0700",
    " PDT": " -0700",
    " PST": " -0800"
};

const fixTimezone = dateStr => {
    let zone = dateStr.slice(-4);
    let time = dateStr.slice(0, -4);
    return time + timezones[zone];
};

let fixedDate = fixTimezone(testDate);
console.log(fixedDate);
console.log(
    moment(fixedDate)
        .tz("America/New_York")
        .format("MMM DD Y, hh:mm z")
);

Использует момент-часовой пояс.

Должен получить 24 января 2019, 03:00 EST

https://jsfiddle.net/ethantrawick/xectfsby/12/

...