Преобразовать конкретную дату часового пояса в локаль, используя момент - PullRequest
0 голосов
/ 03 января 2019

У меня есть следующие данные для часового пояса:

{
    "Id": "Pacific Standard Time",
    "DisplayName": "(UTC-08:00) Pacific Time (US & Canada)",
    "StandardName": "Pacific Standard Time",
    "DaylightName": "Pacific Daylight Time",
    "BaseUtcOffset": "-08:00:00",
    "AdjustmentRules": [{
        "DateStart": "0001-01-01T00:00:00Z",
        "DateEnd": "2006-12-31T00:00:00Z",
        "DaylightDelta": "01:00:00",
        "DaylightTransitionStart": {
            "TimeOfDay": "0001-01-01T02:00:00Z",
            "Month": 4,
            "Week": 1,
            "Day": 1,
            "DayOfWeek": 0,
            "IsFixedDateRule": false
        },
        "DaylightTransitionEnd": {
            "TimeOfDay": "0001-01-01T02:00:00Z",
            "Month": 10,
            "Week": 5,
            "Day": 1,
            "DayOfWeek": 0,
            "IsFixedDateRule": false
        },
        "BaseUtcOffsetDelta": "00:00:00"
    }, {
        "DateStart": "2007-01-01T00:00:00Z",
        "DateEnd": "9999-12-31T00:00:00Z",
        "DaylightDelta": "01:00:00",
        "DaylightTransitionStart": {
            "TimeOfDay": "0001-01-01T02:00:00Z",
            "Month": 3,
            "Week": 2,
            "Day": 1,
            "DayOfWeek": 0,
            "IsFixedDateRule": false
        },
        "DaylightTransitionEnd": {
            "TimeOfDay": "0001-01-01T02:00:00Z",
            "Month": 11,
            "Week": 1,
            "Day": 1,
            "DayOfWeek": 0,
            "IsFixedDateRule": false
        },
        "BaseUtcOffsetDelta": "00:00:00"
    }],
    "SupportsDaylightSavingTime": true
}

и следующая дата:

2019-01-05T07:30:07Z

Используя момент, я хотел бы преобразовать это в мою текущую локаль, которая

en-GB

Как мне поступить с моментами?

проблема, кажется, в том, что формат даты, который у меня есть, не совместим с моментом.

Я подготовил jsfiddle с переменными, к которым у меня есть доступ:

http://jsfiddle.net/jimmyt1988/xe7ha5ms/1/

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Разобрался, используя метод utcOffset:

http://jsfiddle.net/jimmyt1988/xe7ha5ms/2/

moment("2019-01-05T07:30:07Z")
.utcOffset("-08:00:00")
.format("DD/MM/YYYY HH:mm:ss");
0 голосов
/ 03 января 2019

Ваш ввод в формате ISO 8601 распознается на данный момент.Вы можете проанализировать его, используя moment.tz:

Конструктор moment.tz принимает все те же аргументы, что и конструктор момента, но использует последний аргумент как времяидентификатор зоны .

, затем вы можете преобразовать его в нужный часовой пояс, используя tz():

Изменится мутатор moment#tzчасовой пояс и обновите смещение.

Вы можете установить языковой стандарт для текущего объекта, используя locale(), а затем использовать format() для отображения значения.

Вот пример кода:

console.log(
  moment.tz('2019-01-05T07:30:07', 'America/Los_Angeles') // parse input in given tz
    .tz('Europe/London') // Convert moment to desired zone
    .locale('en-gb') // set en-gb locale
    .format('LLLL') // display result
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>
...