Почему дата в Angular становится на 3 часа позже?

Проблема с изменением даты в Angular может возникать из-за разницы в часовых поясах между вашим локальным компьютером и сервером Angular. Это может привести к тому, что дата, которую вы получаете из сервера, отображается на 3 часа позже в вашем приложении.

Одним из решений этой проблемы является использование Angular DatePipe для форматирования даты в приложении. Дата, полученная из сервера, может быть в формате UTC (Universal Coordinated Time). Чтобы скорректировать дату с учетом часового пояса вашего компьютера, вы можете использовать метод transform объекта DatePipe:

import { Pipe, PipeTransform } from '@angular/core';
import { DatePipe } from '@angular/common';

@Pipe({
  name: 'adjustTimezone'
})
export class AdjustTimezonePipe implements PipeTransform {
  transform(date: string | Date, format: string): string {
    const datePipe: DatePipe = new DatePipe('en-US');
    const adjustedDate: Date = new Date(date);

    // Получаем разницу в минутах между вашим часовым поясом и UTC
    const timezoneOffset: number = adjustedDate.getTimezoneOffset();

    // Корректируем дату с учетом разницы в часовом поясе
    adjustedDate.setMinutes(adjustedDate.getMinutes() - timezoneOffset);

    // Форматируем корректированную дату 
    return datePipe.transform(adjustedDate, format);
  }
}

В вашем шаблоне вы можете использовать эту трубку следующим образом:

{{ dateFromServer | adjustTimezone:'yyyy-MM-dd HH:mm:ss' }}

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

Но необходимо отметить, что если ваше приложение работает с разными часовыми поясами, то более надежное решение заключается в хранении даты в UTC на сервере и конвертации ее в соответствующий часовой пояс на клиентской стороне. Для этого вы можете использовать библиотеки, такие как Moment.js, чтобы работы с датами были более гибкими и точными.