Преобразование даты календаря Java в дату JavaScript с использованием новой функции Date (). GetTimezoneOffset () - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть данные календаря, которые отправляются на сервер, они содержат эти поля -

export interface CalendarDate{
    dayOfMonth: number;
    hourOfDay: number;
    minute: number;
    month: number;
    second: number;
    year: number;
}

Я хочу преобразовать их в javascript Date со ссылкой на вычисление смещения времени, я прочитал многопосты в этом вопросе, правильно ли так делать?это будет работать во всех случаях?

 return new Date(modificationDate.year, modificationDate.month, modificationDate.dayOfMonth,
                modificationDate.hourOfDay, modificationDate.minute -new Date().getTimezoneOffset(), modificationDate.second);

1 Ответ

0 голосов
/ 15 ноября 2018

То, что вы делаете, это использование значений UTC как локальных, поэтому вам нужно использовать смещение часового пояса, чтобы вернуться к правильному времени.

Нет, это не будет работать во всех случаях, так как вы получаете смещение часового пояса для времени запуска функции, а не для даты, которую вы анализируете.Это может отличаться в местах, где смещение часового пояса изменилось либо в результате государственного регулирования или законодательства, либо в результате перехода на летнее время.Например, острова Лайн недавно изменились с -12 на + 14.

Итак, предполагая, что вы получаете данные в формате UTC, вы можете использовать Date.UTC, чтобы получить правильную дату и время:

// data for 2018-01-01T12:00:00Z
var data = {
    dayOfMonth: 1,
    hourOfDay: 12,
    minute: 0,
    month: 0,
    second: 0,
    year: 2018
};

// Current function, uses current timezone offset regardless of date
function toDate(data) {
  return new Date(
    data.year, data.month, data.dayOfMonth, data.hourOfDay,
    data.minute - new Date().getTimezoneOffset(), data.second);
}

// Better function, pure UTC
function toDateNew(data) {
  return new Date(Date.UTC(
    data.year, data.month, data.dayOfMonth, data.hourOfDay,
    data.minute, data.second));
}

console.log('Existing: ' + toDate(data).toISOString() + 
          '\nor      : ' + toDate(data).toString() + 
          '\nNew func: ' + toDateNew(data).toISOString() +
          '\nor      : ' + toDateNew(data).toString()
);

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

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