Как преобразовать часовой пояс Windows в момент времени JS - PullRequest
0 голосов
/ 22 мая 2018

У меня есть раскрывающийся список для выбора часового пояса в пользовательском интерфейсе.enter image description here, что раскрывающиеся данные взяты из раскрывающегося списка настроек часового пояса Windows enter image description here

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

Моя структура таблицы: enter image description here

Машинописный код ts

import * as moment from 'moment';
import * as momenttimezone from 'moment-timezone';

private ConvertServerTimezoneToClient(dateTime: string, dateFormat: string, timeFormat: string, timezoneFormat: string, isDstzone: string) {
    timeFormat = timeFormat.toString().indexOf('tt') > -1 ? timeFormat.replace('tt', 'a') : timeFormat;
    var convertedTime = '';
    if (timezoneFormat && timezoneFormat != '' && timezoneFormat != "null") {
        if (isDstzone == 'true') {
            momenttimezone.tz.add(''); // need to map
            momenttimezone.tz.link(''); // need to map
            var zoneName = ''; // need to map
            var isDstDate = momenttimezone.tz(new Date(dateTime), zoneName).isDST();
            if (isDstDate) {
                convertedTime = moment(dateTime).zone(timezoneFormat).add(1, 'hours').format(dateFormat + ' ' + timeFormat);
            } else {
                convertedTime = moment(dateTime).zone(timezoneFormat).format(dateFormat + ' ' + timeFormat);
            }
        }
        else {
            convertedTime = moment(dateTime).zone(timezoneFormat).format(dateFormat + ' ' + timeFormat);
        }
    }
    return convertedTime
}

Момент js имеют больше форматов часового поясаhttps://github.com/moment/moment-timezone/blob/develop/data/packed/latest.json

Как отобразить часовой пояс Windows на текущий часовой пояс.Базовый код пользовательского интерфейса с машинописью aurelia.Нужна помощь.

1 Ответ

0 голосов
/ 23 мая 2018

Нет быстрого или простого способа сделать это.Momentjs не поддерживает это и не планирует - по той же причине, почему вы должны делать это на сервере, а не на клиенте.Если вам нужны часовые пояса в формате Windows в коде .NET, используйте NodaTime на вашем сервере, чтобы сделать это .

Если по тем или иным причинам вы все еще настаиваете на том, чтобы делать это на клиенте,Вы можете использовать официальный файл для преобразования часовых поясов Windows и IANA .Разберите этот файл, а затем используйте его для сопоставления.

В остальном, я бы настоятельно рекомендовал работать с метками времени UNIX вместо строк. намного проще передать однозначное число, которое каждая приличная библиотека DateTime будет знать, как правильно конвертировать, чем отслеживать и правильно анализировать строковую метку времени везде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...