Формат даты в Angular на основе часового пояса

Я получаю даты от моего API в формате UTC. Мне нужно вывести даты, используя местный часовой пояс пользователя. Каждому пользователю назначается часовой пояс, который я извлекаю из своего API.

Используя следующую документацию, я смог заставить все работать для всех часовых поясов с + (т.е. +100, +200 и т. Д.). Однако, когда у меня есть часовой пояс с - (то есть -800). Это не работает.

Работает:

{{element.myDate | date:'d-MMM-yyyy HH:mm' : '+800' }}

Первоначальное значение: 7 января 2019 года 00:46

Новое значение: 7 января 2019 года 16:46

НЕ работает (часовой пояс игнорируется):

{{element.myDate | date:'d-MMM-yyyy HH:mm' : '-800' }}

Первоначальное значение: 7 января 2019 года 00:46

Новое значение: 7 января 2019 года 00:46

Класс Angular, используемый после вызова API

export class MyClass {
  constructor(
    public myDate: Date,
    public otherData: string
  ) {}
}

1 ответ

Решение

Поскольку в Angular дата считается "локальной", вы можете сначала преобразовать ее в UTC и показать результат в представлении. Метод преобразования ниже предполагает, что myUtcDate свойство присутствует в классе элемента:

this.myUtcDate = new Date(Date.UTC(
  this.myDate.getFullYear(),
  this.myDate.getMonth(),
  this.myDate.getDate(),
  this.myDate.getHours(),
  this.myDate.getMinutes(),
  this.myDate.getSeconds()
));
{{ element.myUtcDate | date:'d-MMM-yyyy HH:mm' : '-800' }}

Смотрите этот стек для демонстрации.

Другие вопросы по тегам